Xcode 7.3に更新した後、ポッドファイルにCannot create __weak reference in file using manual reference counting
エラーがスローされます。誰かがこの問題を解決しましたか?
Build Settings -> Apple LLVM 7.1 - Language - Objective C -> Weak References in Manual Retain Release
をYES
に設定します。
Apple Developers Forums-Xcode 7.3b4、非アーク、__ weak参照を作成できません から取得。
これは、リンクのAppleからの公式回答です。
この問題は、以下に基づいて意図したとおりに動作します。現在、すべてのObjective-C言語モードで弱参照を実装しています。 「__weak」は歴史的に非ARC(および非GC)言語モードでは無視されてきたため、このエラーを追加して、今後セマンティクスが変わる場所を指摘しました。バグレポートを更新して、これがまだ問題であるかどうかをお知らせください。
したがって、基本的に、サードパーティライブラリにPodを使用している場合は、非ARCで__weakを削除するか、更新を待つ必要があります。
@ 3/23に更新
これらの種類をバイパスするために、コンパイラーに渡すことができるフラグについてさらに調査する必要があります。しかし、基本的には、予期しない競合を避けるために、今後__weak
を非ARCモードで使用しないでください。 cocoapodsユーザーの場合、__weak
を削除したり、更新を待つ必要はありませんが、Leanが言ったように、ビルド設定でWeak References in Manual Retain Release
フラグをYESに設定します。この助けを願っています。
これを解決する最善の方法は、すべてのポッドターゲットでpost_install
フラグをyes
に設定するWeak References in Manual Retain Release
スクリプトをPodfileに追加することです。これを行うには、Podfile
の最後に次のコードを貼り付けます。
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
end
end
end
時々、それを行うとエラー-fobjc-weak is not supported on the current deployment target
が発生します。これを解決するには、別の構成オプションを追加し、すべてのポッドを必要なバージョンにターゲット設定します( この回答に基づいて ):
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.3'
end
end
end
FBSettings.mのFacebook弱参照の回避策
ポッドファイルには、ポッドのインストール/更新後に実行するスクリプトを書くことができます。そこでは次のように説明されています。
post_install do | installer |
classy_pods_target = installer.pods_project.targets.find {| target | target.name == 'Facebook-iOS-SDK'}
classy_pods_target.build_configurations.each do | config |
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
end
end
CLANG_ENABLE_OBJC_WEAKという魔法の言葉を見つける方法。 。
これを見つけました。
__weakを削除することを意味すると思います
https://forums.developer.Apple.com/thread/38934
えーと、MRR [manual retain-release]の下で弱い変数参照のようなものはありましたか? 「__weak」は、次の2つのうちの1つまたは両方を意味します。
所有されていない参照(つまり、保持カウントを表していない)。
ゼロ化参照(つまり、参照されるオブジェクトの割り当てが解除されるとランタイムがゼロ化する)。
とにかく変数を保持しないため、#1はMRRには適用されません。
#2はMRRにも適用されません。これは、ランタイムサポートがGCとARC [自動参照カウント]にあり、使用していないためです。
コンパイラは、今までできないことを実行できないと不平を言っているようです。 (アプリデリゲートの場合、アプリデリゲートは通常割り当て解除されないため、実行時に違いを伝えることはできません。)
[ビルドフェーズ]タブでターゲットに移動し、[ソースのコンパイル]でポッドファイルを探し、それらのファイルをクリックして、コンパイラフラグ "-fobjc-arc"を追加します。
または、__weak
を__unsafeunretained
に変更します。これにより、従来の問題が解決されます。 MRC(xCode 4の前)以来、__ weakはiOSにはありませんでした。