🐥
iOSで大サイズフレームワークの取り扱い
third partyで100M以上のフレームワークファイルもらったことがあって、直でgit pushだとgitサーバ怒られるので、サーバに保存して使用時にダウンロードできないか調査しました。cocoapodsとspm両方できるので、それぞれどう実現するかをまとめました。
Cococapods
フレームワークurlで直指定できないので、prepare_command
使って事前にフレームワークのzipファイルをダウンロードしてunzipするようにします。
Pod::Spec.new do |s|
# existing setting...
# Download framework zip file from url
framework_urls = [
'http://example.com/frameworks/test1.framework.zip',
'http://example.com/frameworks/test2.framework.zip'
]
# Download and unzip each framework file
s.prepare_command = <<-CMD
mkdir -p frameworks
#{framework_urls.map { |url| "curl -L -o frameworks/#{File.basename(url)} #{url} && unzip -o frameworks/#{File.basename(url)} -d frameworks/" }.join("\n")}
CMD
s.ios.vendored_frameworks = 'frameworks/test1.framework', 'frameworks/test2.framework'
# existing setting...
end
Swift package manager
spmすでにurlからダウンロードできる設定があります。
Package.swiftのフレームワーク引用にbinaryTarget(name:url:checksum:)
を使う
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "TestPackage",
products: [
.library(
name: "TestPackage",
targets: ["TestPackage"]),
],
dependencies: [
],
targets: [
.binaryTarget(
name: "TestFramework",
url: "https://yourwebsite.com/frameworks/test1.xcframework.zip",
checksum: "checksumcode"
),
.target(
name: "TestPackage",
dependencies: ["TestFramework"]
),
]
)
Discussion