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

Posted

技术标签:

【中文标题】Xcode:不同的目标有不同的rootViewController?【英文标题】:Xcode: Different targets have different rootViewController? 【发布时间】:2017-10-29 06:06:22 【问题描述】:

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

我基本上按照 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

生产目标和开发目标的根视图控制器不同。除非我明确设置(我没有),否则我看不出根视图控制器在两个目标之间有何不同。

我检查了项目文件,两个目标之间的“常规 -> 部署信息”是相同的。我还检查了故事板,那里没有指定不同的视图控制器。

有什么想法或者我该如何解决?

谢谢!

【问题讨论】:

【参考方案1】:

啊! 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。我将复选框切换为打开,现在它正在工作。呸。

【讨论】:

以上是关于Xcode:不同的目标有不同的rootViewController?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:如何为指向两个不同团队帐户(企业和公司)的两个不同目标选择两个不同的应用程序组

具有不同 ViewController 目标的菜单解决方案的 XCode 表视图与按钮

如何在 Xcode 7 中动态更改单元测试的目标?

在 XCode 的一个目标中有两个 GoogleService-Info.plist

如何确保我的 Xcode UITest 目标仅构建目标应用程序?

Xcode 在更改时为每个应用程序目标编译情节提要