こちらは iOS Second Stage Advent Calendar 2015 の12/9の記事です。
こんにちは。 @shobyshoby です。
皆さん、100MB越えの巨大なSDK1をiOSアプリに組み込もうとして困ったことはありませんか?
私はあります。
100MB越えのファイルはGitHubに置けないため、frameworkを導入するだけで一苦労でした。
その知見をお伝えします。
背景
- ビルド済みのframeworkのみが配布されているタイプのSDK
- frameworkが単体で100MBを超えている
ビルド済みのframeworkのみが配布されているSDKを導入する場合、
専用のリポジトリにframeworkを置いてpodspecを書くか、プロジェクトのリポジトリに含めてしまうか、どちらかの手段をよく使うと思います。
ただし、単体で100MBを超えている場合、そもそもGitHubにPushできなくなってしまうため、どちらの方法も取ることができません。
解決策
S3にzipで圧縮したframeworkを置き、CocoaPodsの機能を使って取得することで解決しました。
podspecではsourceにzipファイルを指定することができます。
https://guides.cocoapods.org/syntax/podspec.html#source
そのため、以下のようなpodspecを記述することで、GitHubにファイルを上げなくても済みます。
{
"source": {
"http": "https://~~~~/LargeSDK.zip"
},
"vendored_frameworks": [
"LargeSDK/LargeSDK.framework"
],
"public_header_files": "LargeSDK/LargeSDK.framework/Versions/A/Headers/*.h",
"resources": "LargeSDK/LargeSDK.framework/Versions/A/Resources/LargeSDK.bundle"
}
まとめ
100MB越えのファイルはGitHubに置けないため、S3にzipファイルを置き、それを参照するようなpodspecを書くと解決できます。
補足(余談)
Git Large File Storageも検証したのですが、以下の点を考慮してS3を選びました。
- CocoaPodsがGit LFSに対応していないため、SDKをプロジェクトのリポジトリに含める必要がある
- Podsディレクトリでキャッシュできないため、CIで回すたびに巨大なファイルがfetchされてしまう
- 全iOSエンジニアにGit LFSクライアントの導入を強制する必要がある
- Git LFSがS3と比べて割高
- frameworkの差分は管理する必要がない
Git LFSはまだまだこれからな気がしています。
-
Adobe Creative SDKというSDKが100MBを超えていました ↩