Xcode:不同的目标有不同的rootViewController?

时间:2017-10-29 06:06:23

标签: ios swift xcode appdelegate

我有一个功能强大的应用(在应用商店中)。在过去,我们只有一个版本的应用程序,其中一个目标在Xcode中。我们的开发周期变得更加复杂,因此我们希望有两个Xcode目标:生产和开发。这两个目标将具有两个不同的捆绑标识符,因此我们可以同时在手机上运行不同的版本。这是一个类似的策略:https://www.raywenderlich.com/68613/create-paid-lite-version-iphone-app

我基本上遵循了raywenderlich指令来复制我的目标并设置预处理器宏。到目前为止唯一的变化是使用不同的图标。

" Original"该应用程序的版本是"生产"版。新复制的目标是"开发"版本

我正在使用将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

根视图控制器在生产和开发目标之间是不同的。我不知道两个目标之间的根视图控制器是如何不同的,除非我明确地设置了它(我没有做到)。

我检查了项目文件和&#34;一般 - &gt;部署信息&#34;两个目标之间是一样的。我还检查了故事板,那里没有任何指定不同视图控制器的东西。

任何想法是什么,或我如何解决它?

谢谢!

1 个答案:

答案 0 :(得分:0)

尔加! FFS我明白了。事实证明,我错过了另一条记录线说:

... Unknown class _TtC8MyApp20LaunchViewController in Interface Builder file.

我发现了这一点,因为我尝试手动(从故事板)实例化我的LaunchViewController并且也得到了这个错误。我发现该模块是错误的。

然后我找到了SO问题:XCODE 7.1 Swift 2 Unknown class in Interface Builder file这帮助我发现有些旧的故事板元素没有选择Inherit Module From Target。我将复选框切换为打开,现在它正在工作。唷。

enter image description here