2016-12-13 1 views
1

Swift 2.2で構築されたiOSアプリがあり、最近問題が発生しました。 Xcodeを使ってアプリケーションを停止した後、電話機(実際のデバイスとシミュレータの両方)から直接開こうとすると、最初のView Controllerをロードする前にクラッシュします。AppDelegateのNSProcessInfo.processInfo()。環境にアクセスすると、Xcode以外のiOSアプリを開くときにクラッシュする

私はクラッシュログをsymbolicateすることができたとThread 0 Crashed内の最初の行が含まれています。私はAppDelegate内側の線で

0x001aa754 specialized AppDelegate.application(UIApplication, didFinishLaunchingWithOptions : [NSObject : AnyObject]?) -> Bool (AppDelegate.swift:417) 

を:

let buildFor = NSProcessInfo.processInfo().environment["BUILD_FOR"]! as String 

私はそれが原因であることが確認されましたその行をコメントアウトしてそれをlet buildFor = "DEV"に置き換えた後で、Xcodeで閉じても問題なくホーム画面からアプリを開くことができたのでクラッシュします。

私は2つのスキームを持っていますが、1つはであり、もう1つはPRODです。 Xcode経由で実行されているが、デバイス/シミュレータからは実行されていない場合、その値は何になるのですか。どのように変更できますか?この環境変数は、複数の場所(主にAppDelegate)で使用され、運用サーバーまたは開発サーバー用に、またサードパーティサービスに適切なAPIキーを使用して、使用するURLを決定します。 TestFlightビルドの場合はDEV、App Storeの場合はPRODに設定します。

+0

Xcode以外の実行の環境変数はどのように設定していますか? (スキーム内のものは、Xcodeで動作している間のみ有効です;彼らは決してアプリケーションに焼かれません) –

+0

私は非Xcodeの実行のためにそれらを設定していません。これは問題の可能性があります。どのように私はそれらを設定するはずですか? –

+0

ここで4つまたは5つの方法の議論があります:http://stackoverflow.com/questions/603785/environment-variables-in-mac-os-x/4567308#4567308 –

答えて

0

NSProcessInfo.processInfo()の代わりに、私は結局別のアプローチを行った。目標の下 - >設定をビルド - >その他スウィフト旗を、私は2つの異なるフラグ、このようなDEBUGRELEASEと一緒に行きました: enter image description here

その後

AppDelegate.swift以内に私はスウィフトプリプロセッサマクロ#の場合/他の#/#エンドを使用それを複数のXcodeのスキームを必要としないこの方法をやって

#if DEBUG 
    let buildFor = "DEV" 
    print("it is DEV") 
#else 
    let buildFor = "PROD" 
    print("it is PROD") 
#endif 

// setting appropriate API keys, server URLs, etc 
let apiKey = buildFor == "DEV" ? "testing api key" : "production one" 

:私のオリジナルbuildForブール変数を定義します。

関連する問題