dylibを使用する方法
dylibはxcframeworkに入れたとて、app store connectを通過することはできない。
'''
ITMS-90429: Invalid Swift Support - The files libswiftDarwin.dylib, libswiftMetal.dylib, libswiftCoreAudio.dylib, libswiftsimd.dylib, libswiftQuartzCore.dylib, libswift_Concurrency.dylib, libswiftos.dylib, libswiftObjectiveC.dylib, libswiftDispatch.dylib, libswiftCoreGraphics.dylib, libswiftCoreFoundation.dylib, libswiftUIKit.dylib, libswiftCoreMedia.dylib, libswiftAVFoundation.dylib, libswiftCore.dylib, libswiftFoundation.dylib, libswiftCoreImage.dylib aren’t at the expected location /Payload/Runner.app/Frameworks. Move the file to the expected location, rebuild your app using the current public (GM) version of Xcode, and resubmit it.
'''
上記に対策法が書いてあったので、実際に試してみる。
lipo -create mylib.dylib -output mylib
上記コマンドで .dylib という拡張子を外せます。
> otool -L mylib
mylib (architecture x86_64):
@rpath/mylib.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/mydependlib.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1336.0.0)
otool -L で依存関係を確認できます。
上記のままではdylibを探してしまっているので変更する必要があります。ここでは、mylib.dylib は自分自身でmydependlib.dylibはmylib.dylibが依存している共有ライブラリです。
install_name_tool -id @rpath/mylib.framework/mylib mylib
install_name_tool -change @rpath/mydependlib.dylib @rpath/mydependlib.framework/mydependlib mylib
上記で参照先をdylibなしの方に変更できます。
Could not build the precompiled application for the device.
Error (Xcode): Cycle inside Runner; building could produce unreliable results.
~~~
○ That command depends on command in Target 'Runner': script phase “[CP] Embed Pods Frameworks”
○ That command depends on command in Target 'Runner': script phase “Thin Binary”
~~~
そのままでは上記のエラーが出てしまうので、Build Phaseの順番を変更する必要があります。
Info.plistの MininumOSVersionについて
vtool -show mylib
上記コマンドでそのバイナリのminosが確認できます
lipoでdylibを無くすことで DynamicLibrary.process() を使えるようになり、 App Store Connectが通るようになった
下記リポジトリを見ればios向けのビルド方法が書いてあります。
cmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../ios.toolchain.cmake -DPLATFORM=OS64COMBINED
cmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../ios.toolchain.cmake -DPLATFORM=SIMULATORARM64
cmake --build . --config Release
cmake --install . --config Release
❯ lipo -info mylib
Architectures in the fat file: mylib are: arm64
上記で architectureの確認が可能です。