我有一个应用程序是功能(在应用程序商店)。在过去,我们只有一个版本的应用程序在Xcode中有一个Target。我们的开发周期变得越来越复杂,所以我们希望有两个Xcode目标:生产和开发。这两个目标将有两个不同的包标识符,因此我们可以同时在手机上运行不同的版本。这是一个类似的策略:https://www.raywenderlich.com/68613/create-paid-lite-version-iphone-appXcode:不同的目标有不同的rootViewController?
我基本上遵循raywenderlich指令来复制我的目标并设置一个预处理宏。目前唯一的变化是使用不同的图标。
该应用程序的“原始”版本是“生产”版本。新复制的目标是“开发”版本。
我正在使用故事板,其中LaunchViewController
设置为Is Initial View Controller
选项。
在AppDelegate中,我有一些代码通过window?.visibleViewController
获取根视图控制器,并设置它的一些信息:
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
根视图控制器是生产和发展目标之间的不同。我没有看到根视图控制器如何在两个目标之间有所不同,除非我明确设置(我没有)。
我检查了项目文件,两个目标之间的“常规 - >部署信息”是相同的。我还检查了故事板,并且没有指定不同视图控制器的内容。
任何想法发生了什么或我如何解决它?
谢谢!