10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS Second StageAdvent Calendar 2015

Day 9

100MB越えの巨大SDKをCocoaPodsで扱う

Last updated at Posted at 2015-12-08

こちらは 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はまだまだこれからな気がしています。

  1. Adobe Creative SDKというSDKが100MBを超えていました

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?