iOSアプリケーションを開発中です。閉鎖をエスケープすると、リリース設定でリンカエラーが発生する
私のサーバAPIリクエストでは、他のパラメータの中でも@escaping
クロージャを使用するAlamofireラッパーメソッドを使用します。通常、成功、失敗、ローディングインジケータの処理に使用します。クロージャ自身は、ViewControllerサブクラスでlazy var
と宣言されています。そのようなクロージャーの例:私は私のAPIのラッパーメソッドを呼び出す方法
lazy var sendRequestSuccess = {() -> Void in
// do something here
}
:
APIRequestHelper.sharedInstance.sendRequest(success: requestSuccess, progress: animateActivityIndicator, failure: requestFailure)
// APIRequestHelper is my class for all API requests
そして、一般的なケースでは、私のAPIメソッドは、次のようになります。
func sendRequest(success: @escaping() -> Void, progress: @escaping (AnimationAction) -> Void, failure: @escaping (String?) -> Void) {
// Alamofire request sending and response handling goes here
}
私の問題
でアプリをビルドすると構成では、すべてがスムーズに構築されて実行されます。しかし、Release
設定(これまでのところ、それらの96)私の@escaping
クロージャのすべてにこのように見えるリンカエラーを生成します。私はを試してみました何
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
:カップルより多くの追加メッセージと
"__TFFC8<my app name>27AddressPickerViewControllerg23getPlaceLocationFailureFGSqSS_T_auL_4selfS0_", referenced from:
__TTSf4d___TFFC8<my app name>27AddressPickerViewControllerg23getPlaceLocationFailureFGSqSS_T_U_FGSqSS_T_ in AddressPickerViewController.o
"__TFFC8<my app name>26RequestsListViewControllerg22getRequestsListSuccessFGSqGSaCS_5Order__T_auL_4selfS0_", referenced from:
__TTSf4g___TFFC8<my app name>26RequestsListViewControllerg22getRequestsListSuccessFGSqGSaCS_5Order__T_U_FGSqGSaS1___T_ in RequestsListViewController.o
"__TFFC8<my app name>19LoginViewControllerg19getCountriesFailureFGSqSS_T_auL_4selfS0_", referenced from:
__TTSf4g___TFFC8<my app name>19LoginViewControllerg19getCountriesFailureFGSqSS_T_U_FGSqSS_T_ in LoginViewController.o
を
リンカエラーを参照する他のいくつかの質問では、私は$(inherited)
がビルド設定>リンクの「その他のリンカフラグ」にあることを確認しました。実際、オプション(ライブラリリスト)はDebug
とRelease
の構成で同じです。私はまた、ビルドの設定>アーキテクチャのオンとオフを切り替える "アクティブなアーキテクチャだけをビルド"しようとしました。 しかし、私のケースでは、言語自体の一部である@escaping
クロージャが問題を引き起こすようだが、そのような質問の多くはさまざまなサードパーティのライブラリに関連している。
これは私の開発者のキャリアの最初の問題で、私自身のSOの質問をあまりにも先に書きました。