私は機能しているアプリを持っています(アプリストア内)。過去には、Xcodeに1つのターゲットを持つアプリケーションのバージョンが1つしかありませんでした。私たちの開発サイクルはもう少し複雑になっています。そのため、2つのXcodeターゲット(生産と開発)が必要です。この2つのターゲットには2つの異なるバンドルIDがあるため、電話で同時に異なるバージョンを実行することができます。これはこれと似た戦略です:https://www.raywenderlich.com/68613/create-paid-lite-version-iphone-appXcode:ターゲットには異なるrootViewControllerがありますか?
私は基本的にraywenderlichの指示に従ってターゲットを複製し、プリプロセッサマクロを設定しました。これまでの唯一の変更は、別のアイコンを使用することです。
「オリジナル」バージョンのアプリは「プロダクション」バージョンです。新しく複製されたターゲットは「開発」バージョンです。
LaunchViewController
がIs Initial View Controller
オプションとして設定されているストーリーボードを使用しています。 AppDelegateで
、私はwindow?.visibleViewController
経由ルートのViewControllerを取得し、その上にいくつかの情報を設定するコードがあります:アプリの本来の(生産)のバージョンで
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) -> Bool {
// ...
guard let launchVC = window?.visibleViewController as? LaunchViewController else {
NSLog("visibleViewController is nil or not LaunchViewController")
return
}
NSLog("calling startUserManagerAndLogin - launch")
launchVC.startUserManagerAndLogin()
// ...
return true
}
を、すべてが正常に動作し続けます。コンソールに次の行が表示され、アプリが正常に起動します。
... Visible View Controller: Optional(<MyApp.LaunchViewController: 0x7f84dea02a00>)
ただし、開発版のアプリです。私はguard
ケースが失敗するのを見ている。コンソールに表示される内容は次のとおりです。
... Visible View Controller: Optional(<UIViewController: 0x7fbd1e509570>)
... visibleViewController is nil or not LaunchViewController
ルートビューコントローラは、本番環境と開発対象では異なります。私は明示的にそれを設定しない限り、ルートビューコントローラが2つのターゲット間でどのように異なっているのか分かりません。
私はプロジェクトファイルをチェックし、 "General - > Deployment Info"は2つのターゲット間で同じです。私はストーリーボードもチェックしましたが、そこには別のView Controllerを指定するものはありません。
何が起こっているのか、どうすれば修正できるのでしょうか?
ありがとうございます!