私はカカオポッドを使用してdeTesseractOCR
ライブラリをインストールしました。アプリは、iOS12
デバイスを含むデバイスで実行すると正常に動作します。クラッシュはiOS12シミュレータでのみ発生します。 iOS 11.4 Simulator
もインストールしましたが、それでも問題なく動作します。私はしばらくの間これのために頭をかいてきました。これは私が得るクラッシュです。
dyld: lazy symbol binding failed: can't resolve symbol ___cxa_guard_acquire in /Users/IancuTudor/Library/Developer/CoreSimulator/Devices/ABE5EE31-47C8-4457-8F33-B4C265599147/data/Containers/Bundle/Application/40814EAD-8965-47F2-8036-3DE48A8143BF/Bookly.app/Frameworks/TesseractOCR.framework/TesseractOCR because dependent dylib #1 could not be loaded
dyld: can't resolve symbol ___cxa_guard_acquire in /Users/IancuTudor/Library/Developer/CoreSimulator/Devices/ABE5EE31-47C8-4457-8F33-B4C265599147/data/Containers/Bundle/Application/40814EAD-8965-47F2-8036-3DE48A8143BF/Bookly.app/Frameworks/TesseractOCR.framework/TesseractOCR because dependent dylib #1 could not be loaded
(lldb)
libstdc++ is removed in iOS 12 simulator but it remains in the iOS 12.0 (device) .
したがって、回避策として、ライブラリ(libstdc ++。6.0.9.tbd)をXcode9.4からXcode10にコピーできます。ただし、これは長期的な解決策ではありません。これらのライブラリのプロバイダーに連絡して、libc ++を使用してビルドされたバージョンを要求する必要があります。
またはCocoapodsを依存関係マネージャーとして使用している場合は、ポッドファイルに次のコマンドを追加できます。
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == 'TesseractOCRiOS'
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
header_phase = target.build_phases().select do |phase|
phase.is_a? Xcodeproj::Project::PBXHeadersBuildPhase
end.first
duplicated_header_files = header_phase.files.select do |file|
file.display_name == 'config_auto.h'
end
duplicated_header_files.each do |file|
header_phase.remove_build_file file
end
end
end
終わり
よりクリーンなアプローチとして、ポッドファイルでフレームワークを次のように置き換えることができます。
pod 'TesseractOCRiOS', :git => 'git://github.com/parallaxe/Tesseract-OCR-iOS.git', :branch => 'macos-support'
IOS 12のこのブランチにサポートが追加されました。これが、私と同じように誰かに役立つことを願っています:)
シミュレーターを実行するには、tdbファイルではなくdylibファイルをコピーする必要がありました。
前提条件:Xcode 9.4が正確にその名前でインストールされている。必要に応じて、以下のFROM
およびTO
を変更します。
これは、dylibファイルをコピーするためのターミナルコマンドです。
FROM="Xcode 9.4"
TO="Xcode"
set -x; for f in /Applications/"$FROM".app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libstdc++*; do : Sudo cp -p "$f" "${f/$FROM/$TO}"; done; set +x
警告! Sudo
が関係しているので、本当に注意する必要があります。あなたは私を信頼しますか?
コマンドをすぐにコピーすると、スクリプトはドライランを実行します。 Sudo
の前にある:
を削除して、ファイルシステムを実際に変更します。 set -x
は、実行されたすべてのコマンドのログを有効にします。
質問とは関係ありませんが、CocoaPodsを使用する場合は、ある時点で次のパッチも適用する必要があります。 https://Gist.github.com/gali8/7d090865a904a16caf5a7a3116c3c3ab
この方法を使用していますが、podfileファイル「pod'TesseractOCRiOS '、:git =>' git://github.com/parallaxe/Tesseract-OCR-iOS.git '、:branch = > 'macos-support'”