рдХреЛрдЯрд▓рд┐рди рдкреНрд▓рдЧрдЗрди рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рд╣реИ, рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдирдпрд╛ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХрд┐рд╕реА рд╕реЗ рдореЗрдЯрд╛ рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рдЖрд░реНрдо 64 рд▓рд┐рдпрд╛ рд╣реИ):
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!