Setelah plugin kotlin mengumpulkan banyak kerangka kerja berbeda untuk arsitektur berbeda, kami secara manual membuat kerangka universal baru tempat kami menyalin data meta dari apa pun (dalam kasus kami, kami mengambil 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!