diff --git a/.idea/dictionaries/Andrey_Yastrebov.xml b/.idea/dictionaries/Andrey_Yastrebov.xml
new file mode 100644
index 00000000000..e0b05d268fd
--- /dev/null
+++ b/.idea/dictionaries/Andrey_Yastrebov.xml
@@ -0,0 +1,7 @@
+
+
+
+ sandboxing
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt
index 74689179bef..c92add2f2c6 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt
@@ -76,6 +76,8 @@ private object XcodeEnvironment {
val sign: String? get() = System.getenv("EXPANDED_CODE_SIGN_IDENTITY")
+ val userScriptSandboxingEnabled: String? get() = System.getenv("ENABLE_USER_SCRIPT_SANDBOXING")
+
override fun toString() = """
XcodeEnvironment:
buildType=$buildType
@@ -147,6 +149,7 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
val envEmbeddedFrameworksDir = XcodeEnvironment.embeddedFrameworksDir
val envFrameworkSearchDir = XcodeEnvironment.frameworkSearchDir
val envSign = XcodeEnvironment.sign
+ val userScriptSandboxingEnabled = XcodeEnvironment.userScriptSandboxingEnabled
val frameworkTaskName = lowerCamelCaseName(AppleXcodeTasks.embedAndSignTaskPrefix, framework.namePrefix, AppleXcodeTasks.embedAndSignTaskPostfix)
@@ -174,6 +177,23 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
return
}
+ if (userScriptSandboxingEnabled == "YES") {
+ locateOrRegisterTask(frameworkTaskName) { task ->
+ task.group = BasePlugin.BUILD_GROUP
+ task.description = "Embed and sign ${framework.namePrefix} framework as requested by Xcode's environment variables"
+ task.doFirst {
+ throw IllegalStateException(
+ "You have sandboxing for user scripts enabled. " +
+ "\nTo make the $frameworkTaskName task pass, disable this feature. " +
+ "\nIn your Xcode project, navigate to \"Build Setting\", " +
+ "and under \"Build Options\" set \"User script sandboxing\" (ENABLE_USER_SCRIPT_SANDBOXING) to \"NO\". " +
+ "\nFor more information, see documentation: https://jb.gg/ltd9e6"
+ )
+ }
+ }
+ return
+ }
+
val embedAndSignTask = locateOrRegisterTask(frameworkTaskName) { task ->
task.group = BasePlugin.BUILD_GROUP
task.description = "Embed and sign ${framework.namePrefix} framework as requested by Xcode's environment variables"
@@ -185,6 +205,9 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework
if (envSign != null) {
property("sign", envSign)
}
+ if (userScriptSandboxingEnabled != null) {
+ property("userScriptSandboxingEnabled", userScriptSandboxingEnabled)
+ }
}
}