gradle plugin for building Xcode Projects for iOS, watchOS, macOS or tvOS

Overview

gradle-xcodePlugin

The gradle xcode plugin (gxp) makes it easier to build Xcode projects by specifying the build settings in a single configuration file. The goal is to keep the build file as simple as possible, but also enable a great flexibility for the build.

The gxp uses the Apple command line tools (like xcodebuild) to perform the build.

Here a brief overview of the features:

  • Build iOS, watchOS, tvOS and Mac projects
  • Override sign settings for builds
  • Perform unit tests
  • Support for multiple Xcodes (on one machine)
  • Cocoapods support
  • Carthage support
  • Appledoc support
  • Code coverage support (using gcovr or using CoverageReport )
  • OCLint

Requirements

Xcode 12 or greater

  • Gradle 2.14 or greater
  • Java 1.6 or greater

Current stable version is 0.22.2

Parameters Documentation

Usage

Create a build.gradle file and place it in the same directory where xcodeproj file lies.

Here the minimal content you need in your build.gradle file:

buildscript {
  repositories {
    maven {
      url('https://openbakery.org/repository/')
    }
  mavenCentral()
  }

  dependencies {
    classpath "org.openbakery:xcode-plugin:0.22.+"
  }
}

apply plugin: "org.openbakery.xcode-plugin"

Current develop version

When using the openbakery.org repository you can also get the latest develop version by including develop into the version pattern. e.g.:

classpath "org.openbakery:xcode-plugin:0.22.2.develop.+"

The develop version contains all the changes from the develop branch, where all the fixes and feature are implemented. The development version is deployed automatically when all the projects unit tests are successful, and also the if the example projects build.

Example

You find example projects in example/ with a working build.gradle file. After you have fetched the example go to the example/iOS/Example directory and you build the project different targets:

  • Build with gradle xcodebuild
  • Run the unit tests with gradle test
  • Perform a device build and upload it to App Center with gradle integration. Here you need to specify your sign settings first (see Signing ). Open the build.gradle file an follow the instructions.
  • Perform an appstore build with gradle appstore. (Also the sign settings are needed).

Need help?

If you need help you can create an issue here on GitHub, you can send me a mail or ask on twitter.

Collaborate

I'm always happy to receive pull requests with new features and if you send a pull request please consider the following things:

  • Use the develop branch for pull requests, because all the new stuff is implemented in the develop branch and also pull requests are always merge into develop
  • Use Tabs instead of spaces.
  • Make sure that all unit tests are working before you send the pull request. Just run 'gradle test'
  • I urge you to write unit tests.
  • For unit test please use the spock framework for mocking. I want to remove the old gmock framework and port the old tests to use spock.
  • Pull requests that contains new features or fixes but without any unit tests will NOT be merged.

License

This project is licensed under the terms of the Apache license. See the LICENSE file.

Comments
  • Entitlements processing problem

    Entitlements processing problem

    Hi there!

    Here is a part of archived-expanded-entitlements.xcent:

        <key>com.apple.developer.associated-domains</key>
        <array>
            <string>applinks:some.link.com</string>
        </array>
    

    But codesign -d --entitlements - ./ returns:

        <key>com.apple.developer.associated-domains</key>
        <string>*</string>
    

    I think you should use all archived-expanded-entitlements.xcent properties preferred to ones from embedded.mobileprovision.

    enhancement priority:high status:testing 
    opened by bamx23 31
  • Keychain Access Group wildcard

    Keychain Access Group wildcard

    It's about keychain-access-groups again. As I see, xcodePlugin creates entitlements from provisioning profile and doesn't use existing entitlements? If so, why?

    The problem is that it's look like wildcard (A1B2C3D4.*) access group and enterprise provisioning profile not allows to write in shared keychain. It's strange the only difference in two builds (one of them working, other - not) is concrete or wildcard access groups.

    priority:high 
    opened by bamx23 26
  • Codesign with Enterprise profile does not work

    Codesign with Enterprise profile does not work

    Hi Team,

    I can able to make a build with adhoch and development provisions profile with Gradle but am facing issue while making build with Enterprise provisioning profile

    Does gradle support making build with In-house Provision profile?

    opened by AkhileshwarBV 26
  • package tasks fails with NullPointerException

    package tasks fails with NullPointerException

    Hi Rene,

    I have next stacktrace:

    Caused by: java.lang.NullPointerException
        at org.openbakery.InfoPlistModifyTask.prepare(InfoPlistModifyTask.groovy:35)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    

    If I run gradle package

    opened by emartynov 24
  • Appledoc fails with exception

    Appledoc fails with exception

    I have java 8 as default JDK. When I try to run appledoc command I get next output:

    java.lang.ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration
    
    opened by emartynov 21
  • Create .ipa file instead of .app file

    Create .ipa file instead of .app file

    Hi renep, I am creating Xcode build through gradle plugin I am using the gradle xcodebuild command to run the script

    I can able to create .app file and app.dysm file in /build/sym/Release-iphoneos folder but I am expecting the .ipa file instead of .app file

    please could you guide me to create .ipa file instead of .app file

    screen shot 2015-03-13 at 4 31 59 pm screen shot 2015-03-13 at 4 31 59 pm

    here I am seining you my build script:

    buildscript { repositories { maven { url('http://openbakery.org/repository/') } mavenCentral() } dependencies { classpath group: 'org.openbakery', name: 'xcodePlugin', version: '0.9.+' } } apply plugin: 'xcode'

    xcodebuild { configuration='Release' sdk = 'iphoneos' target = 'Test' signing { identity = 'iPhone Distribution: Republic Services Inc. (YKXBJ5R297)' certificateURI = 'file://localhost/Users//PrivateKey.p12' certificatePassword = pwd mobileProvisionURI = 'file://localhost/Users/Employee_Directory_Adhoc-3.mobileprovision' }

    }

    question 
    opened by AkhileshwarBV 21
  • Gradle test task failing following update to Xcode 8

    Gradle test task failing following update to Xcode 8

    I have an iOS Framework project that is composed of the main Framework target as well as a static library target. I've been running the gradle test task on this project with Xcode 7 installed and the tests in the test target having been running as expected. Following my update of Xcode yesterday to the latest version (8), the tests run fine within Xcode but fail when run via the gradle test task.

    I see that the gradle test task does manage to launch the simulator but the task fails subsequently with a linking error as follows:

    ERROR - Linking: Build/sym/Debug-iphonesimulator/MySDK.framework/MySDK
    Testing failed:
    "_AbstractTicketDecoder_initialize", referenced from:
    "_AccountConverters_initialize", referenced from:
    ...
    

    The classes that it's complaining of are those that reside in the static library target.

    Is anyone else having problems running their tests via the Gradle plugin?

    feedback needed 
    opened by adil-hussain-84 19
  • Archive fails on 'xcodebuild clean -showBuildSettings' because of working directory

    Archive fails on 'xcodebuild clean -showBuildSettings' because of working directory

    With 0.14.4.develop.65 I'm having a problem with the archive task:

    Execution failed for task ':app:archive'.
    > Command failed to run (exit code 66): '/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild clean -showBuildSettings'
      Tail of output:
      xcodebuild: error: The directory /Users/paleozogt/Development/MyProj does not contain an Xcode project or workspace.
    

    I think it's because my build.gradle is in a sub-project (MyProj/app). The other tasks behave properly, but it seems like archive depends on what directory the ./gradlew invocation is run from.

    bug status:testing 
    opened by paleozogt 17
  • Feature/fix test output parsing

    Feature/fix test output parsing

    These changes improve the parsing of the test output and fixes issue https://github.com/openbakery/gradle-xcodePlugin/issues/101

    First, every command run through the command runner is now run via "script" which ensures that the stdout is line-buffered. This fixes issues I was having with stdout getting corrupted, sometimes resulting in partial lines.

    Then I updated the test output parsing (of both XcodeTestTask and TestBuildOutputAppender) to look for the ** TEST SUCCEEDED ** or ** TEST FAILED ** that is output via xcodebuild at the end of a test run. This is a much more reliable method for determining when each test destination run is complete.

    opened by icecrystal23 17
  • Imported signing certificate can't be found

    Imported signing certificate can't be found

    I'm using different certificates for different builds. So I configure my .gradle file accordingly. However builds have been failing

    Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings (“Some App AdHoc Distribution”) were found.
    

    I think the reason for failure is here:

    Run command: 'security create-keychain -p This_is_the_default_keychain_password /Users/username/Library/Keychains/gradle.keychain'
    Run command: 'security unlock-keychain -p This_is_the_default_keychain_password /Users/username/Library/Keychains/gradle.keychain'
    Run command: 'security -v import /Users/username/path/someapp/build/Certificates.p12 -k /Users/username/Library/Keychains/gradle.keychain -P mysecretpassword -T /usr/bin/codesign'
    import "/Users/username/path/someapp/build/Certificates.p12" "-k" "/Users/username/Library/Keychains/gradle.keychain" "-P" "mysecretpassword" "-T" "/usr/bin/codesign"
    1 identity imported.
    Run command: 'security list'
    "/Users/username/Library/Keychains/login.keychain"
    "/Library/Keychains/System.keychain"
    :provisioning-install
    

    It seems like keychain creation and certificate import succeeds, but then 'security list' does not find gradle.keychain. It used to work.

    gradle 1.12 OS X 10.9.2 Xcode 5.1.1

    question 
    opened by orkoden 16
  • build didn't mark as fail.

    build didn't mark as fail.

    Hi. I've found strange issue. I have some errors during my build, as result I see the build is "succsess", but should be "failed" Here is console output:

    ...
     {my_file_path} No such file or directory
    
    2015-10-16 13:48:41.007 xcodebuild[1430:1031613]  DVTAssertions: Warning in /Library/Caches/com.apple.xbs/Sources/IDEXcode3ProjectSupport/IDEXcode3ProjectSupport-8186/Xcode3Core/LegacyProjects/Frameworks/DevToolsCore/DevToolsCore/BuildSystem/Runtime/PBXTargetBuildContext.mm:739
    Details:  unexpected successful exit code from cancelled command <C0762:'CpResource Basket_Tests':P8>
    Object:   <PBXTargetBuildContext: 0x7f81cd6eb3a0>
    Method:   -createCommandInvocationRecordFromInvocation:
    Thread:   <NSThread: 0x7f81ce4438b0>{number = 8, name = (null)}
    Please file a bug at http://bugreport.apple.com with this warning message and any useful information you can provide.
    ** BUILD FAILED **
    
    
    The following build commands failed:
        CpResource  {My_file_path}
    (1 failure)
    
    Done
    :keychainRemove
    :archive
    :package
    not a device build, so no codesign and packaging needed
    :calabash_build
    
    BUILD SUCCESSFUL
    

    Here is my gradle config for this task, may be I should add some parameter for marking build as fail?

    ...
    task calabash_build(dependsOn:'package', type:Exec){
            description = "Performs build for calabash tests without launching Sinatra mocks service"
            dependsOn calabash_init, calabash_loc
            commandLine 'bundle', 'exec', 'calabash-ios', 'sim', 'reset'
            ext.output = {
                    return errorOutput.toString()
            }
    }
    ...
    gradle.taskGraph.whenReady { taskGraph ->
    
            // ------------------------------------------------------------------------------------------
    
            if (taskGraph.hasTask(calabash) || taskGraph.hasTask(calabash_build)) {
                    println "Configure device settings for the build and calabash tests"
    
                    println "Setting xcodebuild configuration"
                    xcodebuild {
                                    sdk = 'iphonesimulator'
                                    target = ''my_target"
                                    scheme = ''my_scheme"
                                    workspace = 'my.xcworkspace'
                                    configuration = 'Calabash'
                            }
                    }
    ...
    
    opened by kolard 15
  • Generated Symroot folder structure unrecognized by archive task

    Generated Symroot folder structure unrecognized by archive task

    Thanks for the cool plugin. Please help me find out why the folder structure

    When I copied the xcodebuild command from Gradle debug mode and run it in terminal, it seems to be generating what archive task expects.

    # Achieve task expects this
    # and Build task sometimes generates this folder structure. 
    
    build/
    ├─ sym/
    │  ├─ Debug-iphoneos/
    │  │  ├─ .ipa
    │  │  ├─ .sym
    │  │  ├─ ...
    ├─ ...
    
    # Build task most often time generates this folder structure.
    
    build/
    ├─ sym/
    │  ├─  .ipa
    │  ├─  .sym
    │  ├─  ...
    ├─ ...
    
    

    Here's my build.gradle.kts (I also did it with groovy and it's the same issue).

    gradle.taskGraph.whenReady {
          xcodebuild {
              scheme = "dev"
              target = "example"
    
              configuration = "Release"
              simulator = false
    
              infoplist {
                  bundleIdentifier = "ch.thipok.example.dev"
                  bundleDisplayName = "Example Dev"
              }
        }
    }
    

    I tried working around this issue, by running archive task, but the command resulted issue as seen in #457.

    opened by thipokch 3
  • Cannot invoke method toList() on null object

    Cannot invoke method toList() on null object

    The code to get method getiOSIcons breaks during archive task.

            @Internal
    	def getiOSIcons() {
    		ArrayList<String> icons = new ArrayList<>();
    
    		File applicationBundle = parameters.applicationBundle
    		def fileList = applicationBundle.list(
    						[accept: { d, f -> f ==~ /Icon(-\d+)??\.png/ }] as FilenameFilter // matches Icon.png or Icon-72.png
    		).toList()
    
    		def applicationPath = "Applications/" + parameters.applicationBundleName
    
    		for (String item in fileList) {
    			icons.add(applicationPath + "/" + item)
    		}
    
    
    		return icons
    	}
    

    It looks like this RegEx doesn't cover all situations.

    ios/Runner
    ├── Assets.xcassets
    │   ├── AppIcon.appiconset
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   └── [email protected]
    │   ├── Icon.appiconset
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   ├── [email protected]
    │   │   └── [email protected]
    │   └── LaunchImage.imageset
    │       ├── LaunchImage.png
    │       ├── [email protected]
    │       └── [email protected]
    └── Base.lproj
    
    ./gradlew archive --stacktrace             
    
    > Task :infoplistModify
    Set CFBundleIdentifier to my.package.app
    /The/project/path/ios/Runner/Info.plist was updated
    
    > Task :xcodebuild
    Done
    
    > Task :archive FAILED
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':archive'.
    > Cannot invoke method toList() on null object
    
    * Try:
    > Run with --info or --debug option to get more log output.
    > Run with --scan to get full insights.
    
    * Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':archive'.
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:145)
            at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:143)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131)
            at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
            at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
            at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
            at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
            at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
            at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
            at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
            at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
            at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
    Caused by: java.lang.NullPointerException: Cannot invoke method toList() on null object
            at org.openbakery.XcodeBuildArchiveTask.getiOSIcons(XcodeBuildArchiveTask.groovy:65)
            at org.openbakery.XcodeBuildArchiveTask_Decorated.getiOSIcons(Unknown Source)
            at org.openbakery.XcodeBuildArchiveTask.createInfoPlist(XcodeBuildArchiveTask.groovy:127)
            at org.openbakery.XcodeBuildArchiveTask$createInfoPlist$2.callCurrent(Unknown Source)
            at org.openbakery.XcodeBuildArchiveTask.archive(XcodeBuildArchiveTask.groovy:358)
            at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
            at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
            at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
            at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
            at org.gradle.api.internal.tasks.execution.TaskExecution$2.run(TaskExecution.java:239)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
            at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:224)
            at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:207)
            at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:190)
            at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:168)
            at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
            at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
            at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
            at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
            at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
            at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
            at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
            at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
            at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
            at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
            at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
            at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
            at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
            at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
            at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
            at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:61)
            at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:42)
            at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
            at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
            at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:188)
            at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
            at org.gradle.internal.Either$Right.fold(Either.java:175)
            at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
            at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
            at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
            at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:38)
            at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:27)
            at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
            at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
            at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:109)
            at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
            at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
            at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
            at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
            at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
            at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
            at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
            at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:89)
            at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
            at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
            at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
            at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
            at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
            at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:93)
            at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:93)
            at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
            at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
            at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
            at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
            at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
            at org.gradle.api.internal.tasks.execution.TaskExecution$3.withWorkspace(TaskExecution.java:284)
            at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
            at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
            at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
            at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
            at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
            at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
            at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:142)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131)
            at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
            at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
            at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
            at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
            at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
            at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
            at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
            at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
            at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
    
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 27s
    7 actionable tasks: 7 executed
    
    opened by betorcs 8
  • IPA is missing Symbols

    IPA is missing Symbols

    Currently it seems like the gxp does not add the .symbols files when creating an IPA via the package task if bitcode is disabled. When exporting an IPA via Xcode, Xcode adds a Symbols folder containing those files.

    I took a look at the code and it looks like the IPA is build manually and not via xcodebuild -exportArchive... I'd be happy to help and fix the issues, sadly I do not know how to get the .symbols files from the dSyms of the archive.

    opened by BastianKusserow 0
  • Any plans to publish 0.22.0 to Maven Central or Gradle Plugins?

    Any plans to publish 0.22.0 to Maven Central or Gradle Plugins?

    I see in the CHANGELOG that there's a 0.22.0 release which supports Xcode 13.2.1.

    Do you have any plans to publish this release to Maven Central or https://plugins.gradle.org/m2 any time soon?

    opened by adil-hussain-84 6
  • Question: Distribution Method - Development

    Question: Distribution Method - Development

    How can I build *.ipa with this option? i'v found https://github.com/openbakery/gradle-xcodePlugin/blob/main/libxcode/src/main/groovy/org/openbakery/codesign/ProvisioningProfileReader.groovy ProvisioningProfileType

    But, I can't figure out how to use it.

    Regards, Serhii

    opened by serhii-pokrovskyi 1
Releases(0.22.2)
  • 0.22.2(May 10, 2022)

  • 0.22.0(May 10, 2022)

    Changes

    • Update the appstore upload to use the new --upload-package API
    • The Assets.car is now propery created an an Apple Silicon machine.
    • Added support for Xcode 13.2.1.
    Source code(tar.gz)
    Source code(zip)
  • 0.21.1(May 10, 2022)

    Changes

    • Added support for xcframeworks when using carthage
    • Carthage bootstrap is executed also when only the Carthage.private file exists
    • Remove Rome support
    • Change that the altool use the apiKey and apiIssue. (username and password should still work)
    • Change that app extensions gets only the keychain-access-group of the main bundle set.
    • Updated appstore upload task so that it works with Xcode13
    Source code(tar.gz)
    Source code(zip)
Owner
null
A simple to use iOS/tvOS/watchOS SDK to help get you off the ground quickly and efficiently with your Elastic Path Commerce Cloud written in Swift.

Elastic Path Commerce Cloud iOS Swift SDK A simple to use iOS/tvOS/watchOS SDK to help get you off the ground quickly and efficiently with your Elasti

Moltin 36 Aug 1, 2022
Hyperledger Sawtooth is an enterprise solution for building, deploying, and running distributed ledgers (also called blockchains).

Hyperledger Sawtooth SDK Hyperledger Sawtooth is an enterprise solution for building, deploying, and running distributed ledgers (also called blockcha

Ann 1 Oct 29, 2021
A Demo using Vision Framework building on Core ML Framework

Core-ML-Sample A Demo using Core ML, Vision Framework and Swift 4. This demo is based on Inception V3 network. You must run it with Xcode 9 and iOS 11

杨萧玉 215 Nov 9, 2022
A Flutter plugin to wrap HyperPay SDK for iOS and Android.

HyperPay Flutter Plugin This plugin is a wrapper around HyperPay iOS and Android SDK, it's still in alpha release, and supports limited set of functio

NyarTech 11 Nov 27, 2022
Config plugin to auto configure Indy SDK for iOS & Android

Indy SDK Expo Plugin Powered by Getting started | Contributing | License An Expo Config Plugin to automatically set up and configure the Indy SDK for

Animo 6 Aug 14, 2022
ResearchKit is an open source software framework that makes it easy to create apps for medical research or for other research projects.

ResearchKit Framework The ResearchKit™ framework is an open source software framework that makes it easy to create apps for medical research or for ot

null 5.5k Dec 26, 2022
Symptoms - WatchOS app to save symptoms to HealthKit

Symptoms Symptoms is a watchOS app for entering symptoms into HealthKit Screensh

Leptos 1 Sep 4, 2022
Used to integrate the Facebook Platform with your iOS & tvOS apps.

Facebook SDK for iOS This open-source library allows you to integrate Facebook into your iOS app. Learn more about the provided samples, documentation

Meta 7.3k Jan 3, 2023
Install and debug iPhone apps from the command line, without using Xcode

ios-deploy Install and debug iOS apps from the command line. Designed to work on un-jailbroken devices. Requirements macOS You need to have a valid iO

null 3k Jan 8, 2023
Unofficial Notion API SDK for iOS & macOS

NotionSwift Unofficial Notion SDK for iOS & macOS. This is still work in progress version, the module interface might change. API Documentation This l

Wojciech Chojnacki 59 Jan 8, 2023
Fetch the update available status for iOS or macOS apps based on the bundle identifier.

AppUpdately Fetch the update status for a given app bundle identifier, without the need of any remote configuration. Simply provide your app's bundle

Antoine van der Lee 30 Dec 20, 2022
MbientLab 2 Feb 5, 2022
Open-source API Client for iOS, iPadOS, macOS. Built with SwiftUI

Yogu Open-source API Client for iOS, iPadOS, macOS. Built with SwiftUI ?? Yogu is currently in development, and not actually usable yet. Please DO NOT

Beomjun Gil 5 Oct 29, 2022
Project Flat iOS is the iOS client of Agora Flat open source classroom.

Agora Flat iOS Project flat is the iOS client of Agora Flat open source classroom. 中文 Features Open sourced front-end and back-end [Flat Web][flat-web

netless 24 Dec 12, 2022
Native iOS implementation of RadarCOVID tracing client using DP3T iOS SDK

RadarCOVID iOS App Introduction Native iOS implementation of RadarCOVID tracing client using DP3T iOS SDK Prerequisites These are the tools used to bu

Radar COVID 146 Nov 24, 2022
The official CovPass(-Check) iOS apps

CovPass / CovPass Check Einfach. Sicher. Papierlos. Mit der CovPass-App können Bürgerinnen und Bürger ihre Corona-Impfungen direkt auf das Smartphone

null 96 Dec 18, 2022
TelegramStickersImport — Telegram stickers importing SDK for iOS

TelegramStickersImport — Telegram stickers importing SDK for iOS TelegramStickersImport helps your users import third-party programaticaly created sti

null 35 Oct 26, 2022
Native iOS port of KDE Connect

Welcome to KDE Connect iOS 2021's Testing Repository! This project is inteded to be the iOS version of the group of applications called KDE Connect, w

KDE GitHub Mirror 292 Dec 27, 2022
Muxer used on top of Feed iOS SDK for airplay

FeedAirplayMuxer Muxer used on top of Feed iOS SDK for airplay purposes. Demo Project --> https://github.com/feedfm/AirplayDemo Feed Airplay Muxer is

Feed Media 0 May 6, 2022