Open4
macOS/iOS環境用の開発補助ツール
otool
Mach-Oファイル情報表示ツール。
install_name_tool
動的リンク(dylib)パス書換ツール。
lipo
Universal Binary(Fat Binary)操作ツール。
- lipo(1) [osx man page]
- Building a Universal macOS Binary
- Undocumented Mac OS X, 第13回 Universal Binary【後編】
plutil
plist(Property List)ファイル操作ツール。
PlistBuddy
plist(Property List)ファイル操作ツール。
/usr/libexec/PlistBuddy
- MacOS PlistBuddyコマンドを使ってplistファイルを自由に編集しよう
バンドル(Bundle)
Bundles are a fundamental technology in macOS and iOS that are used to encapsulate code and resources.
- Application Bundle:実行可能なアプリケーション。拡張子
.app
- iOS Application Bundle と macOS Application Bundle に分類される(iPadは前者へ)
- Framework Bundle:再利用可能なコード+リソース。拡張子
.framework
- (Standard) Framework Bundle と Umbrella Framework Bundle に分類される。後者の自作は推奨されない。
- Loadable Bundle(macOSのみ):動的ロード可能なコード。拡張子
.bundle
など。 - XCFramework Bundle(Xcode11以降):複数ターゲット向けFrameworkをまとめたもの。拡張子
.xcframework
バージョニング管理
-
CFBundleShortVersionString
: リリースバージョン -
CFBundleVersion
: ビルドバージョン
CPUアーキテクチャ
arch | macOS | iOS/iPadOS | tvOS | watchOS |
---|---|---|---|---|
x86_64 |
✅ | ✅ (simulator) |
✅ (simulator) |
✅ (simulator) |
armv7 |
✅ | |||
armv7s |
✅ | |||
armv7k |
✅ | |||
arm64 |
✅ (Apple Silicon) |
✅ | ✅ | |
arm64e |
✅ | |||
arm64_32 |
✅ |
(docs.elementscompiler.com, CPU Architecturesをもとに作成)
2021年現在、armv6
(ARM 32bit)やi386
(Intel 32bit)はサポートされない。
armv7
はiPhone 4/4S以降/armv7s
はiOS 6.0, iPhone 5/5C, iPad 4以降/armv64
はiOS 7.0, iPhone 5S, iPad Air以降。
arm64e
==PACs(Pointer Authentication Code)有効なARMv8.3命令セット。LLVM Dev Meeting 2019, arm64e - An ABI for Pointer Authentication
armv7k
==ポインタ長32bitのarmv7
バリアント/arm64_32
==ポインタ長32bitのarm64
バリアント。
Apple公式Xcodeサポートページ
包含アーキテクチャ判別
$ file yourlib
yourlib : Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit dynamically linked shared library x86_64] [arm64:Mach-O 64-bit dynamically linked shared library arm64]
yourlib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
yourlib (for architecture arm64): Mach-O 64-bit dynamically linked shared library arm64
$ lipo -archs yourlib
x86_64 arm64
Bitcode包含判定
How to check a static library is built contain bitcode?
$ otool -l yourlib.a | grep __LLVM
静的ライブラリにシンボル__LLVM
が含まれるか否かで判定可能。