2017-10-29 68 views
0

我有一个应用程序是功能(在应用程序商店)。在过去,我们只有一个版本的应用程序在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 

根视图控制器是生产和发展目标之间的不同。我没有看到根视图控制器如何在两个目标之间有所不同,除非我明确设置(我没有)。

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

任何想法发生了什么或我如何解决它?

谢谢!

回答

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

相关问题