背景#
テストによると、iOS 12 の携帯電話に Xcode14.0.2 でエクスポートされた新しいパッケージをインストールすると、開くとクラッシュしますが、システムバージョンが高い携帯電話では問題ありません。
デバッグの結果、クラッシュログはdyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib
で、具体的には以下の通りです:
dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib
Referenced from: /private/var/containers/Bundle/Application/55730273-D9D6-4C42-9335-7A56F92B7F2C/xxx.app/Frameworks/FSPagerView.framework/FSPagerView
Reason: image not founds
検索したところ、開発者コミュニティにこの問題の記録がありました。xcode14 not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib、解決策は以下の通りです:
Xcode 14 または Xcode 14.0.1 でアプリをビルドしている場合、アプリは古い OS バージョンでクラッシュします。これには、Xcode から直接ビルドおよびテストしているときや、App Store にアプリを提出した後も含まれます。影響を受ける OS バージョンには、iOS 11 - 12.1、macOS 10.13 - 10.14.3、および同時期の watchOS および tvOS バージョンが含まれます。Xcode 14 でビルドするときにクラッシュを回避するには、Other Linker Flags ビルド設定に - Wl,-weak-lswiftCoreGraphics(クラッシュに適した他のライブラリ名に置き換え)を追加してください。
つまり、Build Settings
のOther Linker Flags
に-Wl,-weak-lswiftCoreGraphics
を追加します。
ここで注意が必要なのは、Other Linker Flags
に追加することであり、Other Swift Flags
ではありません。以下のエラーが発生した場合は、私と同様に間違った場所に追加したことを示しています。。。
Driver threw unknown argument: '-weak-libswiftCoreGraphics' without emitting errors.
注意 1#
ただし、プロジェクトに複数のTarget
がある場合、Target
ごとに追加する必要があるため、非常に面倒です。したがって、PROJECT
のBuild Settings
に直接追加することができます。
注意 2#
プロジェクトに-Wl,-weak-lswiftCoreGraphics
をOther Linker Flags
に追加した後、コンパイルして実行すると、まだクラッシュし、エラーが表示されます。
dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib
Referenced from: /private/var/containers/Bundle/Application/55730273-D9D6-4C42-9335-7A56F92B7F2C/xxx.app/Frameworks/FSPagerView.framework/FSPagerView
Reason: image not founds
詳細に見ると、エラーに表示されているFSPagerView
はCocoaPods
のサードパーティライブラリであるため、対応するサードパーティライブラリを見つけて、そのライブラリのBuild Settings
でOther Linker Flags
を見つけ、-Wl,-weak-lswiftCoreGraphics
を追加します。再度実行すると、まだエラーが発生しますが、別のサードパーティライブラリに切り替えました。。。
各サードパーティライブラリに一つずつ追加するのは不可能であり、非常に面倒で、毎回Pod install
の後に再設定する必要があるため、正しい解決策ではありません。
したがって、Podfile
のpost_install
に設定を追加して、すべてのサードパーティライブラリにこのコンパイル設定を一度に追加することは可能でしょうか。もちろん可能です。設定は以下の通りです:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['OTHER_LDFLAGS'] = '-Wl,-weak-lswiftCoreGraphics'
end
end
end
その後、コンパイルするとエラーが発生します。プロジェクト内のいくつかのライブラリがswiftCoreGraphics
を使用していないため、例えば OC のサードパーティライブラリや非 UI ライブラリなどです。したがって、変更が必要であり、追加を区別する必要があります。プロジェクト内の Swift タイプの UI 関連のライブラリにこのコンパイルオプションを追加し、他のものには追加しないようにします。最終的な例は以下の通りです:
need_otherlinkerflags_frameworks = ['FSPagerView', 'HandyJSON', 'IQKeyboardManagerSwift', 'JXSegmentedView', 'KDCircularProgress', 'Kingfisher', 'RxSwift', 'PKHUD', 'RxCocoa', 'SnapKit', 'ZLPhotoBrowser']
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if need_otherlinkerflags_frameworks.include?(target.name)
config.build_settings['OTHER_LDFLAGS'] = '-Wl,-weak-lswiftCoreGraphics'
end
end
end
end
Pod install
の後、コンパイルして実行すると、正常に動作することが確認できました。さらに、低バージョンの携帯電話に影響がないか確認しましたが、影響はありませんでした。完璧です。
完了!