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 的一个目标中有两个 GoogleService-Info.plist