CocoaPodsでM1非対応ライブラリをOTHER_LDFLAGSから排除してビルドを通す
みなさん もうM1 Macに乗り換えましたよね??メモリ足りなくないですか???と
Google SignInも無事にM1対応のv6へと更新されたらしく、用済み情報になってきた感もありますので以下、公開しときます。
EXCLUDED_ARCHS[sdk=iphonesimulator*]
の雑対応で済ませてる人もいるんでしょうが、それじゃsimulator使えなくて不便じゃないです?
CocoaPodsのPodsfileの後処理で、OTHER_LDFLAGSを書き換えてやることでビルド通す方法。
例ではGoogleSignInを消してますが、まだまだ他にも非対応のフレームワークはあるかと思いますので適当に書き換えてどうぞ。
Podfile
...
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# exclude specified frameworks
puts target.name
if target.name.start_with? 'Pods-'
xcconfig_path = config.base_configuration_reference.real_path
xcconfig = File.read(xcconfig_path).split("\n")
oldf = xcconfig.filter{|x| x.start_with?("OTHER_LDFLAGS")}.first
if ! oldf.nil?
xcconfig.delete(oldf)
xcconfig.append oldf.sub('OTHER_LDFLAGS =', 'OTHER_LDFLAGS[sdk=iphoneos*] =')
xcconfig.append oldf.sub('OTHER_LDFLAGS =', 'OTHER_LDFLAGS[sdk=iphonesimulator*][arch=x86_64] =')
xcconfig.append oldf.sub('OTHER_LDFLAGS =', 'OTHER_LDFLAGS[sdk=iphonesimulator*][arch=i386] =')
new_oldf = oldf
['GoogleSignIn'].each { |lib|
new_oldf.sub!(" -framework \"#{lib}\"", '')
}
xcconfig.append new_oldf.sub('OTHER_LDFLAGS =', 'OTHER_LDFLAGS[sdk=iphonesimulator*][arch=arm*] =')
File.open(xcconfig_path, "w") { |f| f << xcconfig.join("\n") }
end
end
end
end
end
解説
xcconfigのOTHER_LDFLAGSをゴリゴリ書き換えてます。
sdk/arch指定で、iphonesimulator*
かつarm*
の場合には特定frameworkを排除したのを、そうでないのは元々のを指定しています。
ビルド対象によってはappletv*
,watch*
,macos*
を適当に足してあげてください。
これでpod install
してやればリンカのエラーは消えるので、あとはひたすら#ifdef
で頑張ってください。
framework名
とpodのrepo名
は必ずしも一致/一対一対応していないので、エラーメッセージみつつ適当にどうぞ。
Author And Source
この問題について(CocoaPodsでM1非対応ライブラリをOTHER_LDFLAGSから排除してビルドを通す), 我々は、より多くの情報をここで見つけました https://qiita.com/touta/items/1b29cedcf3dcd9e1fbd1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .