From 2f452062681ba3414fb464679576ecc4f0d44d3c Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Mon, 4 Mar 2019 14:47:32 +0300 Subject: [PATCH] CocoaPods: Replace dynamic dummy framework with a static one --- .../kotlin/gradle/tasks/CocoapodsTasks.kt | 31 ++++++++++++++++-- .../cocoapods/dummy.framework/Info.plist | Bin 708 -> 687 bytes .../resources/cocoapods/dummy.framework/dummy | Bin 23120 -> 5568 bytes 3 files changed, 28 insertions(+), 3 deletions(-) mode change 100755 => 100644 libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/dummy diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/CocoapodsTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/CocoapodsTasks.kt index 7ed9e4d4ce5..f3bb1017015 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/CocoapodsTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/CocoapodsTasks.kt @@ -16,7 +16,7 @@ import java.io.File * The task generates a podspec file which allows a user to * integrate a Kotlin/Native framework into a Cocoapods project. */ -open class PodspecTask: DefaultTask() { +open class PodspecTask : DefaultTask() { @OutputFile val outputFile: File = project.projectDir.resolve("${project.name}.podspec") @@ -90,7 +90,7 @@ open class PodspecTask: DefaultTask() { * So we create a dummy static framework to allow Cocoapods install our pod correctly * and then replace it with the real one during a real build process. */ -open class DummyFrameworkTask: DefaultTask() { +open class DummyFrameworkTask : DefaultTask() { @OutputDirectory val destinationDir = project.cocoapodsBuildDirs.framework @@ -110,12 +110,31 @@ open class DummyFrameworkTask: DefaultTask() { } } + private fun copyTextResource(from: String, to: File, transform: (String) -> String = { it }) { + to.parentFile.mkdirs() + to.printWriter().use { file -> + javaClass.getResourceAsStream(from).reader().forEachLine { + file.println(transform(it)) + } + } + } + private fun copyFrameworkFile(relativeFrom: String, relativeTo: String = relativeFrom) = copyResource( "/cocoapods/dummy.framework/$relativeFrom", frameworkDir.resolve(relativeTo) ) + private fun copyFrameworkTextFile( + relativeFrom: String, + relativeTo: String = relativeFrom, + transform: (String) -> String = { it } + ) = copyTextResource( + "/cocoapods/dummy.framework/$relativeFrom", + frameworkDir.resolve(relativeTo), + transform + ) + @TaskAction fun create() { // Reset the destination directory @@ -127,8 +146,14 @@ open class DummyFrameworkTask: DefaultTask() { // Copy files for the dummy framework. copyFrameworkFile("Info.plist") copyFrameworkFile("dummy", frameworkName) - copyFrameworkFile("Modules/module.modulemap") copyFrameworkFile("Headers/dummy.h") + copyFrameworkTextFile("Modules/module.modulemap") { + if (it == "framework module dummy {") { + it.replace("dummy", frameworkName) + } else { + it + } + } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Info.plist b/libraries/tools/kotlin-gradle-plugin/src/main/resources/cocoapods/dummy.framework/Info.plist index 8fcb3c949a9e4b2fabe0d8066d5b9e0896644d9f..bb3631678fa222c5ecafc79f7ea0cd2bfa6c0d5f 100644 GIT binary patch delta 141 zcmX@Yx}J4{E}Md~imICWM&pHyoDrD;8Toms{=t)d=LeF54hUR2HCP(wTjQ5#Xn7EjPnIxE0nY5S;m`s?=nJgK= QfQb=8GiX6+D8*zA0HZn`RR910 delta 162 zcmZ3_dW3a?E}OE7s)CZ*M&pHyLh%CpnE@I3d8xsfxurRYCHX~@?=ouI8#tL6f}{#S zQpGT-5JMw9!%#yrCrhBDFq$MtF2vBl&|s0e#$AX!?DDiLp^Z4(7zWbkZ z|8vea{pR5pUkV{Y&~4DI(4-K(P!Uo*8=Ae>gor{#c=wCCon4yf-J41bCDjc{jgF=c zjE#*XhgEenIfMt^<5V(vU}Qv94?#V-)~jjp^p&$y(vX#%h9NWMMXlu6F0Q6cU7nmhvHp%Bv|a_sXZ0A&S64L6!_YGsTUL-SH5l(;d>Wp8 z-Tr`$st&`n7ToV&i}5QkiWs-xV|>2F+b}TIVc5F0C`zwstOS zK1R9&3}?02a4z?Nv4HpAXo=zFN06$uaa_SB`3V?5x4_tk=id2*4-eracS65Lm#O&& z>Ii`F0L**mE4k3b{yR(;!LtCrAp3NaF!jJI94`uMq52hVU`MiZauOq}VNH`u0Q*A|WErqbWpp zKRhR*QCND|j7BGzEjcK&1Vgy7aRnz>L4JcOp>CrDD$5C~^ z0G};N&p4}|&~a4Uw2Bgmga^=wEYax_%w0&+Q|ZZ5Xs)LwuQ&>Aitx^azaY21`aU1K zyu5k{_ES*8(&uF;g@LjEoZH*LrHxXHOU&Tio%jS>hg5*V$uqvNh+xZc>4YGrdiACI zw?6##{!#SPP|lP1oHUOp2-k-uE|zcl0nLzDL#ZeaVo#t{=t0N-(3TKht_FL8Gr+kE z#o~1h`ZYgb46Bz!y`OCyM#0_uWJnbQuV_jG$cNq^=Kg?LD(rqT(w*+Z%oSo3OkzcfI1It-L z%_}(Ix=d**ee2<2>_GnKy5QH3HP_|;EWG62;vNo-xb7%?6s2qH`VA94220mDCJ^}U zNmLE^?lR2ayIWnpOV>z|j*p7-UL+*s-_ChCY5!OYI4>8>H$BFjH;Y*!v$}oG+pVJ? z3oanEud?r@9$G^1g9et1K^No*3EbV*XlgLItTxk)D3oeA@? z-7O*!Y$f1B{Y0S!!L(M3MG>I|LxUeQg3y|mB0?4HL;b=Qe2AeG&zYGdyDLQ>RsI*w z-215MeZ zDJsdzqF*%4lR0n2t#rO~!NM!QmugWVCRcvt{iJNmU77HD^KFa<@q8796O^<$&Mq=d z+u7asL}y3$QmjkyC87b5PV|JD<5Z%bxLQNjLUspP*w0@@v^f*HH>w(bCXhBvc7Ji_1TZP@)|9qZ=iaP>dUlLHMJ9DT=+cM*td$TaGxaqQCUY` zyw3BfXJ)jITCaV4?*rLyKdlp+sV_#x@e8FUFrJ_9k*Il7*+3O-X}OTcG8f)Y<=jO& z4n?TG>!@in$u^L8J(-Dbj~jVX;n2H@OCvRTe4EV4l<(=uwA2Eck1ug_MUh|H)(z?W z#fN9SpN#jlkv`0%Dbmc5%ROY=oLwu#!5!R#0s0|ZH?=j z68*b&^gq_y8ay^*F_Jx4;&qP-XOMRC#N($HMbPijfiqGzH|ce@n4IwrlOqnnni z?lh_4fzr^qK-dcgLb zlyp@QoSBxTeaBP(i2!yb$7ITLn=RYP=xH_AvQ^uEq2HQvlsRybX$mr%Mjp6N3wvZ3&3Q-nhfcR>CPBuiwV@R)^jgAJbtJ5 z_D#R^(>JH)sy0{Yw@v%U-uZFe@5F%rE1X6Vix;Z7&FK#m5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH q0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X0D=Drfj