必要なのは、文字列を見つけてそれを別の文字列(すべての場合)に置き換えてファイルを再構築/更新することです。
ファイルはpbxproj
ファイルです。ファイルの例をリンクしました
文書サンプル(このファイルは動作しない例をここで共有するには大きすぎます。前にリンクを確認できます。):
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
4D1498151706397100876A74 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 4D1498141706397100876A74 /* Icon.png */; };
4D1498171706397300876A74 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 4D1498161706397300876A74 /* [email protected] */; };
F8F1FD8E1705DF6A0012AA85 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8F1FD8D1705DF6A0012AA85 /* UIKit.framework */; };
F8F1FD901705DF6A0012AA85 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8F1FD8F1705DF6A0012AA85 /* Foundation.framework */; };
F8F1FD921705DF6A0012AA85 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8F1FD911705DF6A0012AA85 /* CoreGraphics.framework */; };
F8F1FDB61705DF6A0012AA85 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8F1FD8D1705DF6A0012AA85 /* UIKit.framework */; };
F8F1FDB71705DF6A0012AA85 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8F1FD8F1705DF6A0012AA85 /* Foundation.framework */; };
F8F1FDF5170609D20012AA85 /* UIImage+TBTint.m in Sources */ = {isa = PBXBuildFile; fileRef = F8F1FDDD170609D20012AA85 /* UIImage+TBTint.m */; };
F8F1FDF6170609D20012AA85 /* TBBAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F8F1FDE0170609D20012AA85 /* TBBAppDelegate.m */; };
F8F1FDF7170609D20012AA85 /* TBBFlatImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8F1FDE2170609D20012AA85 /* TBBFlatImageViewController.m */; };
F8F1FDF8170609D20012AA85 /* TBBGradientImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8F1FDE4170609D20012AA85 /* TBBGradientImageViewController.m */; };
F8F1FDF9170609D20012AA85 /* TBBMasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8F1FDE6170609D20012AA85 /* TBBMasterViewController.m */; };
F8F1FDFB170609D20012AA85 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = F8F1FDEA170609D20012AA85 /* [email protected] */; };
F8F1FDFC170609D20012AA85 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = F8F1FDEB170609D20012AA85 /* Default.png */; };
F8F1FDFD170609D20012AA85 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = F8F1FDEC170609D20012AA85 /* [email protected] */; };
F8F1FDFE170609D20012AA85 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F8F1FDED170609D20012AA85 /* MainStoryboard.storyboard */; };
.
.
.
.
.
44567HGFGHJK456GH44GHJK /* Debug */ = {
.
.
.
buildSettings = {
...
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1.1.1;
#!/bin/sh
cpath=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)/")
xcodePath="${cpath}ios/Runner.xcodeproj/project.pbxproj"
sed -i -e 's/MARKETING_VERSION = 1.1.1/MARKETING_VERSION = 1.1.2/g' xcodePath
# or tried with awk too
# awk '{gsub("MARKETING_VERSION = 1.1.1","MARKETING_VERSION = 1.1.2"); print}' xcodePath
操作が完了した後にファイルを確認しましたが、何も変更されませんでした。エラーもなく警告もありません!問題を解決する方法はありますか?
答え1
スクリプトは "$"を使用してxcodepath変数を拡張できません。良い:
sed -i -e 's/MARKETING_VERSION = 1.1.1/MARKETING_VERSION = 1.1.2/g' "$xcodePath"
答え2
シェルから変数の値を取得するには、プレフィックスを付ける必要があります$
(引用する必要がない特別な場合以外は引用符で囲むxcodePath
必要があります)"$xcodePath"
。
.
また、メタ文字をエスケープして正規表現を固定する必要があります。それ以外の場合は、誤ってまたはMARKETING_VERSION = 1.1.10
をMARKETING_VERSION = 12151
変更する可能性がありますMARKETING_VERSION = 1.1.2
。また、MARKETING_VERSION = 1.1.
最後の数字を1から2に変更するために文字列を繰り返す必要はなく、キャプチャグループを使用するだけです。
sed -Ei 's/(\<MARKETING_VERSION = 1\.1\.)1;/\12;/' "$xcodePath"
すでにGNU sedを使用しているので、キャプチャグループで角括弧をエスケープする必要がないように、このようなものを追加しました-i
。-E