Après que le plugin kotlin a collecté pour nous un tas de différents frameworks pour différentes architectures, nous créons manuellement un nouveau framework universel dans lequel nous copions les métadonnées de n'importe quel (dans notre cas, nous avons pris arm64):
task copyMeta() {
dependsOn build
doLast {
copy {
from("$buildDir/bin/iphone/main/release/framework/${frameworkName}.framework")
into "$buildDir/iphone_universal/${frameworkName}.framework"
}
}
}
, , , . lipo, :
task lipo(type: Exec) {
dependsOn copyMeta
def frameworks = files(
"$buildDir/bin/iphone32/main/release/framework/${frameworkName}.framework/$frameworkName",
"$buildDir/bin/iphone/main/release/framework/${frameworkName}.framework/$frameworkName",
"$buildDir/bin/iphoneSim/main/release/framework/${frameworkName}.framework/$frameworkName"
)
def output = file("$buildDir/iphone_universal/${frameworkName}.framework/$frameworkName")
inputs.files frameworks
outputs.file output
executable = 'lipo'
args = frameworks.files
args += ['-create', '-output', output]
}
, - Kotlin MPP Info.plist UIRequiredDeviceCapabilities, ( ). PlistBuddy:
task editPlistFile(type: Exec) {
dependsOn lipo
executable = "/bin/sh"
def script = './scripts/edit_plist_file.sh'
def command = "Delete :UIRequiredDeviceCapabilities"
def file = "$buildDir/iphone_universal/${frameworkName}.framework/Info.plist"
args += [script, command, file]
}
edit_plist_file.sh:
/usr/libexec/PlistBuddy -c "$1" "$2"
, zip ( podspec ):
task zipIosFramework(type: Zip) {
dependsOn editPlistFile
from "$buildDir/iphone_universal/"
include '**/*'
archiveName = iosArtifactName
destinationDir(file("$buildDir/iphone_universal_zipped/"))
}
podspec :
task generatePodspecFile(type: Exec) {
dependsOn zipIosFramework
executable = "/bin/sh"
def script = './scripts/generate_podspec_file.sh'
def templateStr = "version_name"
def sourceFile = './podspec/template.podspec'
def replaceStr = "$version"
args += [script, templateStr, replaceStr, sourceFile, generatedPodspecFile]
}
generate_podscpec_file.sh :
sed -e s/"$1"/"$2"/g <"$3" >"$4"
curl :
task uploadIosFrameworkToNexus(type: Exec) {
dependsOn generatePodspecFile
executable = "/bin/sh"
def body = "-s -k -v --user \'$userName:$password\' " +
"--upload-file $buildDir/iphone_universal_zipped/$iosArtifactName $iosUrlRepoPath"
args += ['-c', "curl $body"]
}
task uploadPodspecFileToNexus(type: Exec) {
dependsOn uploadIosFrameworkToNexus
executable = "/bin/sh"
def body = "-s -k -v --user \'$userName:$password\' " +
"--upload-file $generatedPodspecFile $iosUrlRepoPath"
args += ['-c', "curl $body"]
}
:
task createAndUploadUniversalIosFramework() {
dependsOn uploadPodspecFileToNexus
doLast {
println 'createAndUploadUniversalIosFramework complete'
}
}
Profit!