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 DevelopersForumsから取得-Xcode7.3b4、非アーク、__ weak参照を作成できません。
これは、リンクからのAppleからの公式の回答です。
この問題は、以下に基づいて意図したとおりに動作します。すべてのObjective-C言語モードで弱参照を実装中です。「__weak」は歴史的に非ARC(および非GC)言語モードでは無視されてきたため、このエラーを追加して、将来セマンティクスが変更される場所を指摘しました。バグレポートを更新して、これがまだ問題であるかどうかをお知らせください。
したがって、基本的に、サードパーティライブラリにPodを使用している場合は、非ARCで__weakを削除するか、更新を待つ必要があります。
3/23に更新
これらのちょっとしたものをバイパスするために、コンパイラに渡すことができるフラグについてもっと調査する必要があります。ただし、基本的に__weak
、予期しない競合を回避するために、今後は非ARCモードで使用しないでください。cocoapodsユーザーの場合、削除し__weak
たり更新を待つ必要はありませんが、Weak References in Manual Retain Release
Leanが言ったように、ビルド設定のフラグをYESに設定します。この助けを願っています。
これを解決する最善の方法は、すべてのポッドターゲットでフラグをpost_install
設定するスクリプトをポッドファイルに追加することです。これを行うには、の下部に次のコードを貼り付けるだけです。Weak References in Manual Retain Release
yes
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の弱参照の回避策
Podfileには、ポッドのインストール/更新後に実行するスクリプトを作成することができます。ここでは、次のように説明しています。
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 [手動保持リリース]での弱い変数参照のようなものはありましたか?「__weak」は、次の2つのいずれかまたは両方を意味します。
所有されていない参照(つまり、保持カウントを表していない)。
ゼロ化参照(つまり、参照されたオブジェクトの割り当てが解除されると、ランタイムがゼロになります)。
とにかく変数を保持しないため、#1はMRRには適用されません。
#2はMRRにも適用されません。これは、ランタイムサポートが使用していないGCおよびARC [自動参照カウント]にあるためです。
コンパイラーは、今では決してできないことを実行できないと不平を言っているようです。(アプリデリゲートの場合、通常、アプリデリゲートの割り当てが解除されることはないため、実行時に違いを区別することはできません。)
またはに変更__weak
し__unsafeunretained
ます。これは伝統的な問題を解決します。MRC(xCode 4-より前)以降、__ weakはiOSにはありませんでした。
-Wall -Wextra -Wno-unused-parameter
有効に警告フラグを。