2017-10-29 70 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

相關問題