Xcode 14でひとつのプロジェクトから2つのバージョンを作る late2022
有料&無料や、エンジン部分が同じで2つのアプリを出すときなど、ひとつのプロジェクトから2つのバージョンを作る記録です。これにはターゲットを新たに作ります。
Xcode 14.0.1でやってみたのでそのレポートです。
前提
有料版 GetMonster
無料版 GetMonsterFree
というアプリ名とします。
まずはGetMonsterという名前でプロジェクトを作成します。
ここではiOSで、InterfaceがStoryboardで作成しました。
Bundle Identifierは、なになに.GetMonsterに設定。
プロジェクトの設定はこうなりました。
Project名
GetMonster.project
ターゲットの設定などはこうなりました。
A = B = C
という書き方をしているところは、
設定内容はA、それはBを見に行く、それはCを見に行くという意味です。
Target名
GetMonster
Display name(ターゲット/General)
空白 = ${TARGET_NAME}か${PRODUCT_NAME} = GetMonster
Info.plistの場所と名前(ターゲット/Build Setting/Packaging)
GetMonster/Info.plist
Product Bundle Identifier(ターゲット/Build Setting/Packaging)
なになに.GetMonster
Product Name(ターゲット/Build Setting/Packaging)
${TARGET_NAME} = GetMonster
スキーム名
GetMonster
ここから分割スタートです。
ターゲット複製
既存のターゲットを選択し右クリックしてDuplicate(複製)を行います。
GetMonster copyというターゲットが出来ます。
ターゲット複製により自動的にInfo.plistとスキームも2つになります。
新しいInfo.plistは一段上の場所に作られます。プロジェクトの直下です。
何が変わったか
Target名
GetMonster copy
Display name(ターゲット/General)
空白 = ${TARGET_NAME}か${PRODUCT_NAME} = GetMonster copy
Info.plistの場所と名前(ターゲット/Build Setting/Packaging)
GetMonster copy-info.plist
Product Name(ターゲット/Build Setting/Packaging)
${TARGET_NAME} = GetMonster copy
スキーム名
GetMonster copy
ターゲットの名前変更
ここから新しい方を編集していきます。新しくできたターゲットをGetMonsterFreeという名前にします。ターゲットを選択して直接編集します。
何が変わったか
Target名
GetMonsterFree
Display name(ターゲット/General)
空白 = ${TARGET_NAME}か${PRODUCT_NAME} = GetMonsterFree
Product Name(ターゲット/Build Setting/Packaging)
${TARGET_NAME} = GetMonsterFree
Bundle IdentifierをGetMonsterFreeに
ターゲットのSigning & Capabilitiesにある簡易設定箇所で編集します。
簡易設定箇所で編集するとBuild Setting/Packagingの値も変わります。
何が変わったか
Product Bundle Identifier(ターゲット/Build Setting/Packaging)
なになに.GetMonsterFree
Info.plistを一つに
今のXcodeではInfo.plistの設定項目が少なく、2つある理由もなさそうなので統一することにしました。
新しくできたGetMonster copy-info.plistを消します。
新しいターゲットのInfo.plistの設定を変えます。
何が変わったか
Info.plistの場所と名前(ターゲット/Build Setting/Packaging)
GetMonster/Info.plist
もちろんInfo.plistがそれぞれに欲しい人は、名前を変更して場所も好きなところにしてターゲットの設定にそれを書き込んで下さい。
(好みに応じて)新く出来たスキームの名前を変更
スキームの名前も変えておきます。Manage Schemesで名前を直接簡単に変更出来ます。
フラグ追加
GetMonsterFreeターゲットのBuild SettingsのOther Swift Flagsにフラグを追加
Swiftの場合、フラグは
-D FREE
と設定する必要があります。FREEのところはご自身のプロジェクトに合わせて設定して下さい。
ソース内で
#if
#else
#endif
を使って分岐させます。
Obj-Cの場合はpreprocessor macrosです。
display nameが空白の時はどこを見ているか
結論;よくわからない
そのた
Product Module NameというのもPRODUCT_NAMEに応じて変わるが、省いた。
まとめ
ターゲットを複製したら
- ターゲット名
- bundle identifier
- Info.plist
- スキーム名
を設定する
Discussion