質問: #### 質問の内容 とあるSDKを作成している者です。 ライブラリ管理ツールのcarthageに対応させようとしています。 通常は carthage update を実行すると githubからソースを取得しそれをビルドをしてFrameworkが作成されると思います。 しかしソースコードを公開することができないため事前にビルドしたバイナリファイルをダウンロードさせるようにしたいと考えてます Carthageのドキュメントを見るとGitHub Releaseに事前にビルドしたバイナリファイルを置いておくと ソースのダウンロード無しに事前にビルドしたファイルをダウンロードしてくれるらしいです。 実際に試してみたところ 事前にビルドしたバイナリのダウンロードが行われず ソースを取得してビルドする動きになってしまいます。 どのようにしたら 「ソースをダウンロードしてビルド」ではなく「バイナリファイルのダウンロード」ができるようになるのでしょうか。 #### 実施した手順 * プロジェクトのあるディレクトリで次のコマンドを実行して事前にビルドしたフレームワークを作成 ``` $ carthage build --no-skip-current $ carthage archive FrameworkSample $ ls *.zip FrameworkSample.framework.zip $ ``` * 作成したファイルをgithubのreleasesに添付した #### 参考 Carthage の “Archive prebuilt frameworks into one zip file” を読むと * ソースからビルドしないで事前にビルドしたFrameworkを使用することができる。 * GitHub Release にビルドしたファイルを添付する。 * 全プラットフォームに対応したバイナリをzipでアーカイブして添付する。 * アーカイブファイルはファイル名に".framework"を含める。 * Draft Releaseは要求されたタグに一致していたとしても無視される。 * 下記のコマンドでアーカイブファイルを作る。 ``` $ carthage build --no-skip-current $ carthage archive YourFrameworkName ``` といったことが書いてあります。
回答: 自己解決しました。 結論から言うと github releases にファイルをアップロードするときに使用したブラウザがFirefoxだったときはNG。ChromeからアップロードしたときはOKだった。 ### なぜそうなるのか carthage update を実行したときに 正常なパターンのときとだめなパターンのときで charlesで通信のログを取得して比較してみたら以下のことがわかった。 github releasesから情報を取得するときのJSONのレスポンスで content_type が application/zip のときは正常で application/x-zip-compressed がだめ ということがわかった。 そして Firefox でアップロードしたときはcontent_typeがapplication/x-zip-compressed になり chrome でアップロードしたときはcontent_typeがapplication/zip になることがわかった。 ほんとは carthage がapplication/x-zip-compressedのときも正常に動作するようになってないといけないんじゃないかと思う。