{"id":20164905,"url":"https://github.com/multi-os-engine/moe-plugin-gradle","last_synced_at":"2025-04-10T00:51:51.436Z","repository":{"id":37951829,"uuid":"65742522","full_name":"multi-os-engine/moe-plugin-gradle","owner":"multi-os-engine","description":"Multi-OS Engine: Gradle Plugin","archived":false,"fork":false,"pushed_at":"2024-08-18T20:01:00.000Z","size":936,"stargazers_count":26,"open_issues_count":2,"forks_count":12,"subscribers_count":9,"default_branch":"moe-master","last_synced_at":"2025-04-10T00:51:45.839Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://multi-os-engine.org","language":"Java","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/multi-os-engine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-15T15:22:35.000Z","updated_at":"2024-08-18T20:01:04.000Z","dependencies_parsed_at":"2024-11-14T00:36:12.410Z","dependency_job_id":"946928a6-805d-4419-9827-f5c963c8c4b0","html_url":"https://github.com/multi-os-engine/moe-plugin-gradle","commit_stats":null,"previous_names":[],"tags_count":36,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multi-os-engine%2Fmoe-plugin-gradle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multi-os-engine%2Fmoe-plugin-gradle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multi-os-engine%2Fmoe-plugin-gradle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multi-os-engine%2Fmoe-plugin-gradle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/multi-os-engine","download_url":"https://codeload.github.com/multi-os-engine/moe-plugin-gradle/tar.gz/refs/heads/moe-master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248137997,"owners_count":21053775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T00:36:03.736Z","updated_at":"2025-04-10T00:51:51.403Z","avatar_url":"https://github.com/multi-os-engine.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MOE Gradle Plugin\n\nThe MOE Gradle plugin adds support to building MOE based applications via Gradle.\n\n## Table of Contents\n\n* [Other Documents](#other-documents)\n* [Basics](#basics)\n  * [Plugins](#plugins)\n  * [SDK](#sdk)\n* [Configuration](#configuration)\n  * [SDK](#sdk)\n  * [ProGuard](#proguard)\n  * [Xcode Project](#xcode-project)\n  * [Code Signing](#code-signing)\n  * [Resource Packaging](#resource-packaging)\n  * [Java Processes](#java-processes)\n  * [UI Actions and Outlets](#ui-actions-and-outlets)\n* [Tasks](#tasks)\n  * [ProGuard Task](#proguard-task)\n  * [Retrolambda Task](#retrolambda-task)\n  * [Dex Task](#dex-task)\n  * [Dex2Oat Task](#dex2oat-task)\n  * [StartupProvider Task](#startupprovider-task)\n  * [ResourcePackager Task](#resourcepackager-task)\n  * [TestClassesProvider Task](#testclassesprovider-task)\n  * [GenerateUIObjCInterfaces Task](#generateuiobjcinterfaces-task)\n  * [XcodeProvider Task](#xcodeprovider-task)\n  * [XcodeInternal Task](#xcodeinternal-task)\n  * [XcodeBuild Task](#xcodebuild-task)\n  * [IpaBuild Task](#ipabuild-task)\n  * [ListDevices Task](#listdevices-task)\n  * [ListSimulators Task](#listsimulators-task)\n  * [Launch Task](#launch-task)\n  * [Test Task](#test-task)\n  * [ConfigRemote Task](#configremote-task)\n  * [TestRemote Task](#testremote-task)\n  * [RemoteServerSetup Task](#remoteserversetup-task)\n  * [NatJGen Task](#natjgen-task)\n  * [UpdateXcodeSettings Task](#updatexcodesettings-task)\n* [Remote Server Settings](#remote-server-settings)\n\n## Other Documents\n\n- [Multi-OS Engine Project Layout](doc/Multi-OS-Engine-Project-Layout.md)\n- [Upgrading to Multi-OS Engine 1.3](doc/Upgrading-to-Multi-OS-Engine-1.3.md)\n\n## Basics\n\n### Plugins\n\nThere are two Gradle plugins:\n\n- `moe-sdk`: this plugin ensures the MOE SDK is installed on the system and exposes the `moe` extension for\naccessing its properties.\n- `moe`: this plugin does the same as `moe-sdk`, but also adds all the tasks, rules, etc. necessary to build a MOE-based\napplication.\n\n### Building\n\nBuild and publish _release_ version to Maven local repository:\n\n```bash\ncd \u003crepo\u003e/moe/tools/master\n./gradlew :moe-gradle:publishMavenJavaPublicationToMavenLocal\n```\n\nBuild and publish _snapshot_ version to Maven local repository:\n\n```bash\ncd \u003crepo\u003e/moe/tools/master\n./gradlew :moe-gradle:publishMavenJavaSnapshotPublicationToMavenLocal\n```\n\nBuild and publish _release_ version to Bintray:\n\n```bash\ncd \u003crepo\u003e/moe/tools/master\n./gradlew :moe-gradle:bintrayUpload \\\n    -Pbintray.user=user \\\n    -Pbintray.key=key\n```\n\nBuild and publish _snapshot_ version to Artifactory:\n\n```bash\ncd \u003crepo\u003e/moe/tools/master\n./gradlew :moe-gradle:artifactoryPublish \\\n    -Partifactory.url=url \\\n    -Partifactory.key=key \\\n    -Partifactory.user=user \\\n    -Partifactory.pass=pass\n```\n\n### Debugging the Plugin\n\nBefore running Gradle, export the following:\n\n```bash\nexport GRADLE_OPTS=\"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005\"\n```\n\nThis way you can remote connect to debug the plugin.\n\n### SDK\n\nThe plugin knows which SDK to download, and automatically installs it into the `.moe` directory under the user's home\ndirectory.\n\nThe default installation directory can be overridden via the `USER_MOE_HOME` environmental variable.\n\nThe plugin's associated SDK is also customizable and is evaluated as follows:\n\n- If there is a path specified via Gradle's project property `moe.sdk.localbuild`, that will be used\n- If the `MOE_SDK_LOCALBUILD` environmental variable exists, that will be used\n- If the `moe.sdk.localbuild` file in the module, the contents of that file will be used\n- Otherwise the default SDK will be downloaded on demand and used\n\nThe SDK's structure must be as follows, otherwise the validation will fail:\n\n```\n+- sdk\n|  +- moe-core.dex\n|  +- moe-core.jar\n|  +- moe-ios-javadoc.jar\n|  +- moe-ios-junit.dex\n|  +- moe-ios-junit.jar\n|  +- moe-ios-dex.jar\n|  +- moe-ios.jar\n|  +- iphoneos/MOE.framework\n|  \\- iphonesimulator/MOE.framework\n\\- tools\n   +- dex2oat\n   +- dx.jar\n   +- ios-device.jar\n   +- java8support.jar\n   +- macosx/lib(clang|imobiledevice|natj).dylib\n   +- preloaded-classes\n   +- proguard-full.cfg\n   +- proguard.cfg\n   +- proguard.jar\n   +- retrolambda.jar\n   +- windows/x86_64/(libeay32|libimobiledevice|natj|ssleay32).dll\n   \\- wrapnatjgen.jar\n```\n\n## Configuration\n\n### SDK\n\nYou may configure a custom SDK version as follows in the build.gradle file:\n\n```groovy\nbuildscript {\n    project.getExtensions().getExtraProperties().set(\"moeSDKVersion\", 1.3.+)\n\n    ...\n}\n```\n\n### ProGuard\n\nProGuard can be configured globally here, or per-config in [ProGuard Task](#proguard-task).\n\n```groovy\nmoe {\n    proguard {\n        // apply level\n        level = 'platform'\n      \n        // path to the base configuration file, or `null` to use SDK default config\n        baseCfgFile = null\n      \n        // null or path to to appended configuration file\n        appendCfgFile = null\n      \n        // whether code minification is enabled. Ignored when `baseCfgFile` is specified. Default to `true`\n        minifyEnabled = true\n      \n        // whether code obfuscation is enabled. Ignored when `baseCfgFile` is specified. Default to `false`\n        obfuscationEnabled = false\n\n        // whether serialization support is enabled. Ignored when `baseCfgFile` is specified. Default to `false`\n        serializationSupport = false\n      \n        // exclude files from `-injars` config that will be processed by proguard\n        excludeFiles = [\n                'META-INF/*.SF',\n                'META-INF/*.DSA',\n                'META-INF/*.RSA'\n        ]\n        excludeFile 'org/bouncycastle/jce/provider/*Spi_8.class'\n    }\n}\n```\n\nProGuard has three supported levels of trimming: `app` (default), `platform`, `all`:\n- `app` will only process the classes of your application and it's non-MOE dependencies. This is the fastest mode and\nis recommended for development.\n- `platform` will do the same as `app` but will also include the `moe-ios.jar` MOE dependency. This mode is a bit\nslower and only provides marginally better results.\n- `all` will do the same as `platform` but will also include the `moe-core.jar` MOE dependency. This is much slower\nthan the other two, but will provide the best size reduction.\n\nAt any of these levels ProGuard may trim out classes which are needed at compile/runtime. For further configuration\nsee [ProGuard Task](#proguard-task).\n\n### Xcode Project\n\nGenerated Xcode project settings can be configured as follows:\n\n```groovy\nmoe {\n    xcode {\n        // Object, path to the Xcode project.\n        project\n        \n        // Object, path to the Xcode workspace.\n        workspace\n\n        // String, name of the main target.\n        mainTarget\n\n        // String, name of the test target.\n        testTarget\n\n        // String, name of the main scheme.\n        mainScheme\n\n        // String, name of the test scheme.\n        testScheme\n    }\n}\n```\n\n**Note:** when working with Xcode workspaces, scheme settings are required!\n\n### Code Signing\n\nCode signing can be configured by the following options:\n\n```groovy\nmoe {\n    signing {\n        // String, ID of the development team.\n        developmentTeam\n\n        // String, path to the provisioning profile or UUID.\n        provisioningProfile\n\n        // String, name of the provisioning profile (new in Xcode 8).\n        provisioningProfileSpecifier\n\n        // String, name of the signing identity\n        signingIdentity\n    }\n}\n```\n\n#### Code Signing Defaults\n\nThe development team setting can have a default value which can be set in this file:\n`\u003cuser-home\u003e/.moe/default.properties`.\n\n```text\ndevelopmentTeam=ABCDEFGHIJ\n```\n\n### Resource Packaging\n\nResource packaging into the application.jar can be configured in the build script with the following options:\n\n```groovy\nmoe {\n    packaging {\n        excludes = ['LICENSE', 'LICENSE.*']\n        exclude 'README.md' // Excludes the README.md file from the application.jar\n    }\n    resources {\n        // Enables resources from the source directory\n        enableResourcesFromSourceDirs = true\n\n        // Excludes all Java source files when copying from the source directory\n        resourcesFromSourceDirExcludes = ['**/*.java']\n    }\n}\n```\n\n### Java Processes\n\nVM arguments for launched Java processes can be customized, for example custom `xmx` values can be set:\n\n```groovy\nmoe {\n    javaProcess {\n        jvmArgs '-Xmx4096m'\n    }\n}\n```\n\n### UI Actions and Outlets\n\nGenerating Objective-C interfaces can be configured to limit what should be generated. By default all classes marked\nwith `@ObjCClassName` annotation will be processed.\n\n```groovy\nmoe {\n    actionsAndOutlets {\n        // Only include classes matching any regex in this array, setting to empty list resets to default behavior\n        includes = ['org\\\\.moe\\\\.\\\\w*Controller']\n\n        // Add include criteria regex to the includes array\n        include 'org\\\\.moe\\\\.\\\\w*Controller'\n        \n        // Additional code to be generated into the Objective-C source\n        additionalCodes = ['@class MyObjCOnlyClass;']\n        additionalCode '#import \"MyClass.h\"'\n        \n        // Disable the generation of specified `@import`'s\n        excludeLibraries = ['NotValidImport']\n        excludeLibrary 'UIKit'\n    }\n}\n```\n\n## Tasks\n\n### ProGuard Task\n\nTask name: `moe\u003csourceset\u003e\u003cmode\u003eProGuard`\n\nThis task collects the dependent jar files and invokes ProGuard with a set of predefined and (optional) custom rules.\nThe rules are composed of two parts. The first part comes from the MOE SDK (`\u003csdk\u003e/tools/proguard.cfg`) which contains\na set of predefined rules. The second part - which is optional - comes from the project's directory\n(`\u003cproject\u003e/proguard.append.cfg`) and contains a set of additional rules which are appended to the original\nconfiguration. If for some reason the original `proguard.cfg` configuration file is not good for your project then you\ncan overwrite it by creating a `proguard.cfg` file in your project directory. The result of this task is a\n`proguarded.jar` file which contains the minimized version of the application code which is required to run. Detailed\ninformation about what got stripped can be found in the `proguard.log` file which is in your build directory.\n\n#### Task Properties\n\n- `proGuardJar`: path to the `proguard.jar` file.\n- `baseCfgFile`: path to the base configuration file.\n- `appendCfgFile`: null or path to to appended configuration file.\n- `minifyEnabled`: whether code minification is enabled. Ignored when `baseCfgFile` is specified.\n- `obfuscationEnabled`: whether code obfuscation is enabled. Ignored when `baseCfgFile` is specified.\n- `mappingFile`: path to the name mapping output file. Generated only if `obfuscationEnabled` is `true`.\n- `inJars`: collection of paths to files being passed to ProGuard via `-injars`.\n- `excludeFiles`: exclude files from `inJars` that will be processed by proguard.\n- `libraryJars`: collection of paths to files being passed to ProGuard via `-libraryjars`.\n- `outJar`: path to ProGuard's output jar.\n- `composedCfgFile`: path to the composed configuration file.\n- `logFile`: path to the task's log file.\n\nSetting any of these properties to null will reset them to their default values.\n\n---\n\n### Retrolambda Task\n\nTask name: `moe\u003csourceset\u003e\u003cmode\u003eRetrolambda`\n\nThis task collects the class files and invokes Retrolambda on them. This will create Java 7 compatible class files from\nJava 8 class files.\n\n#### Task Properties\n\n- `retrolambdaJar`: path to the `retrolambda.jar` file.\n- `inputFiles`: collection of paths to files being passed to Retrolambda via `-Dretrolambda.inputDir`.\n- `classpathFiles`: collection of paths to files being passed to Retrolambda via `-Dretrolambda.classpath`.\n- `defaultMethods`: boolean passed to Retrolambda via `-Dretrolambda.defaultMethods`.\n- `natjSupport`: boolean passed to Retrolambda via `-Dretrolambda.natjSupport`.\n- `expandedClassesDir`: path to a temporary directory, where the input class files are collected.\n- `outputDir`: path to a directory containing the processed class files.\n- `logFile`: path to the task's log file.\n\nSetting any of these properties to null will reset them to their default values.\n\n---\n\n### Dex Task\n\nTask name: `moe\u003csourceset\u003e\u003cmode\u003eDex`\n\nWe need to create a dex file from the proguarded jar which we can later on convert to art and oat files. This task is\nresponsible for that. The result of this task is a `classes.jar` file which can be found in the build directory and\ndetailed information can be found in the `dx.log` file.\n\n#### Task Properties\n\n- `dxJar`: path to the `dx.jar` file.\n- `inputFiles`: collection of paths to files being passed to Dex.\n- `extraArgs`: extra arguments passed to Dex.\n- `destJar`: path to the jar file produced by dex.\n- `logFile`: path to the task's log file.\n\nSetting any of these properties to null will reset them to their default values.\n\n---\n\n### Dex2Oat Task\n\nTask name: `moe\u003csourceset\u003e\u003cmode\u003e\u003carch-family\u003eDex2Oat`\n\n- Values for `mode`: Debug, Release\n- Values for `arch-family`: Arm, Arm64, X86, X86_64\n\nFor Android's ART runtime to function we need to provide an art and an oat file which contains application code\ninformation and everything required by the application to be able to run. This task creates those files from the\nspecified dex file created by the Dex task. The results of this task is an `image.art` file and an `application.oat`\nfile both of which can be found in the build directory, detailed information about the process can also be found in the\nbuild directory in a file called `dex2oat.log`.\n\n#### Task Properties\n\n- `dex2oatExec`: path to the `dex2oat` executable file.\n- `archFamily`: architecture family to build for, passed to dex2oat via `--instruction-set`.\n- `base`: the base address, passed to dex2oat via `--base`.\n- `imageClasses`: path to file containing classes to include in an image, passed to dex2oat via `--image-classes`.\n- `emitDebugInfo`: boolean for emitting debug info, when true passes `--generate-debug-info` to dex2oat, otherwise\npasses `--no-generate-debug-info`.\n- `inputFiles`: path to `.dex`, `.jar`, or `.apk` files to compile, passed to dex2oat via `--dex-file`.\n- `compilerBackend`: compiler backend, passed to dex2oat via `--compiler-backend`.\n- `destImageFile`: path to the image.art file produced by dex2oat.\n- `destOatFile`: path to the application.oat file produced by dex2oat.\n- `logFile`: path to the task's log file.\n\nSetting any of these properties to null will reset them to their default values.\n\n---\n\n### StartupProvider Task\n\nTask name: `moe\u003csourceset\u003e\u003cmode\u003eStartupProvider`\n\nMOE supports extending Objective-C classes from Java, but there are some special cases where we need to register some\nclasses even before the Objective-C runtime initializes. These classes must be collected at build time and this task is\nresponsible for that. The classes it needs to collect are marked with a `@RegisterOnStartup` annotation.\nThe results of this task is in the `preregister.txt` file which can be found in the build directory and additional\ninformation can also be found there in a file called `StartupProvider.log`.\n\n#### Task Properties\n\n- `inputFiles`: collection of paths to files on which the search for the `@RegisterOnStartup` annotations is conducted.\n- `preregisterFile`: path to the output file containing the results.\n- `logFile`: path to the task's log file.\n\nSetting any of these properties to null will reset them to their default values.\n\n---\n\n### ResourcePackager Task\n\nTask name: `moe\u003csourceset\u003e\u003cmode\u003eResourcePackager`\n\nThis task collects the resource files used by the application. These files can originate from the application's resource\nfolder, dependent jars and additional external sources specified in the build script.\nThe result of this task is an `application.jar` file which can be found in the build directory.\n\n---\n\n### TestClassesProvider Task\n\nTask name: `moe\u003csourceset\u003e\u003cmode\u003eTestClassesProvider`\n\nMOE supports running JUnit tests on iOS devices. This requires a list of classes which contain the JUnit tests. This\ntask collects these classes and writes them out in a text file.\n\n#### Task Properties\n\n- `inputFiles`: collection of paths to directories and jars. These inputs will be searched for JUnit tests.\n- `classListFile`: path to the output file containing the class list.\n- `logFile`: path to the task's log file.\n\nSetting any of these properties to null will reset them to their default values.\n\n---\n\n### GenerateUIObjCInterfaces Task\n\nTask name: `moeGenerateUIObjCInterfaces`\n\nGenerates Objective-C class interfaces for working with Xcode's Interface Builder.\n\n#### Task Properties\n\n- `inputFiles`: collection of paths to directories and jars. These inputs will be searched for Objective-C classes.\n- `outputSource`: path to the output file containing the class interfaces.\n- `xcodeProjectFile`: path to the Xcode project.\n\nSetting any of these properties to null will reset them to their default values.\n\n---\n\n### XcodeProvider Task\n\nTask name: `moe\u003csourceset\u003e\u003cmode\u003e\u003carch\u003e\u003cplat\u003eXcodeProvider`\n\n- Values for `mode`: Debug, Release\n- Values for `arch`: Armv7, Arm64, I386, X86_64\n- Values for `plat`: Iphoneos, Iphonesimulator\n\nThis task is responsible for collecting all of the files which are needed by Xcode so it can compile the application\npackage. This task depends on most of the tasks described above. Also, this task will throw an error if the Xcode\nproject is not yet updated.\n\n---\n\n### XcodeInternal Task\n\nTask name: `moeXcodeInternal`\n\nThis task is only called when the build is initiated from Xcode. If this is the case, Xcode will set a few environmental\nvariables which this task will try to read and configure the other dependent tasks according to them. This task will\nlook for the following environmental variables:\n\n- `PLATFORM_NAME`: target platform (iphoneos or iphonesimulator)\n- `CONFIGURATION`: target configuration (Debug or Release)\n- `ARCHS`: target architectures for the build\n- `MOE_BUILD_SOURCE_SET`: source set to build\n\nAll of these variables are required, otherwise the task will fail.\n\n---\n\n### XcodeBuild Task\n\nTask name: `moe\u003csourceset\u003e\u003cmode\u003e\u003cplat\u003eXcodeBuild`\n\n- Values for `mode`: Debug, Release\n- Values for `plat`: Iphoneos, Iphonesimulator\n\nThis task invokes `xcodebuild` and creates the application.\n\n#### Task Properties\n\n- `target`: target name in the Xcode project.\n- `scheme`: scheme name in the Xcode project.\n- `configuration`: configuration to build, derived from `mode`.\n- `sdk`: sdk to build for, derived from `plat`.\n- `xcodeProjectFile`: path to the Xcode project file.\n- `xcodeWorkspaceFile`: path to the Xcode workspace file.\n- `additionalParameters`: additional parameters to pass to `xcodebuild`.\n- `provisioningProfile`: path to the provisioning profile or UUID.\n- `provisioningProfileSpecifier`: name of the provisioning profile (new in Xcode 8).\n- `signingIdentity`: name of the signing identity.\n- `developmentTeam`: ID of the development team.\n- `xcodeBuildRoot`: `xcodebuild` root output directory.\n- `xcodeBuildSettingsFile`: path to the output Xcode build settings file.\n\n### Remote Build Properties\n\n- `resources` resources directories\n- `excludes` directories and files to exclude on upload (does not apply to the resources)\n\n```groovy\nmoe {\n    remoteBuild {\n        resources = [ file(\"../android/assets\") ]\n        excludes = [ file(\".gitignore\") ]\n     }\n}\n```\n\n---\n\n### IpaBuild Task\n\nTask name: `moeIpaBuild`\n\nThis task creates an ipa from the app.\n\n**Note:** Settings the Ipa export Scheme, Developer Team in the [code signing options](#code-signing) is required!\n\nIpa export can be configured by the following options:\n\n```groovy\nmoe {\n    ipaExport {\n\n        // (String) Path to the export options plist. If this defined, all other settings ignored\n        plistFile\n\n        // (Boolean) For non-App Store exports, should Xcode re-compile the app from bitcode? Defaults to false.\n        compileBitcode\n\n        // (Boolean) For non-App Store exports, if the app uses On Demand Resources and this is true,\n        // asset packs are embedded in the app bundle so that the app can be tested without a server to host asset\n        // packs. Defaults to true unless onDemandResourcesAssetPacksBaseURL is specified.\n        embedOnDemandResourcesAssetPacksInBundle\n\n        // (String) For non-App Store exports, if the app is using CloudKit, this configures the\n        // \"com.apple.developer.icloud-container-environment\" entitlement. Available options: Development and Production.\n        // Defaults to Development.\n        iCloudContainerEnvironment\n\n        // For non-App Store exports, users can download your app over the web by opening your distribution manifest\n        // file in a web browser. To generate a distribution manifest, the value of this key should be a dictionary with\n        // three sub-keys:\n\n        appURL\n\n        displayImageURL\n\n        fullSizeImageURL\n\n        // (String) Describes how Xcode should export the archive. Available options: app-store, ad-hoc, package,\n        // enterprise, development, and developer-id. The list of options varies based on the type of archive. Defaults\n        // to development.\n        method\n\n        // (String) For non-App Store exports, if the app uses On Demand Resources and\n        // embedOnDemandResourcesAssetPacksInBundle isn't YES, this should be a base URL specifying where asset packs\n        // are going to be hosted. This configures the app to download asset packs from the specified URL.\n        onDemandResourcesAssetPacksBaseURL\n\n        // (String) For non-App Store exports, should Xcode thin the package for one or more device variants? Available\n        // options: \u003cnone\u003e (Xcode produces a non-thinned universal app), \u003cthin-for-all-variants\u003e (Xcode produces a\n        // universal app and all available thinned variants), or a model identifier for a specific device\n        // (e.g. \"iPhone7,1\"). Defaults to \u003cnone\u003e.\n        thinning\n\n        // (Boolean) For App Store exports, should the package include bitcode? Defaults to false.\n        uploadBitcode\n\n        // (Boolean) For App Store exports, should the package include symbols? Defaults to true.\n        uploadSymbols\n\n    }\n}\n```\n\n**Note:** If xcode project use manual signing, provisioningProfileSpecifier is required!\n\n#### Task Properties\n\n- `inputApp`: path to the app to create the ipa from.\n- `outputIpa`: path to the output ipa file.\n\n---\n\n### ListDevices Task\n\nTask name: `moeListDevices`\n\nThis task lists the UDID's of the connected devices.\n\n---\n\n### ListSimulators Task\n\nTask name: `moeListSimulators`\n\nThis task lists the UDID's of the available simulators.\n\n---\n\n### Launch Task\n\nTask name: `moeLaunch`\n\nThis task builds and runs the main target of this application on the specified device(s) and/or simulator(s). The\nfollowing project properties control this task:\n\n- `-Pmoe.launcher.devices`: comma separated list of device of UDIDs to run the app on.\n- `-Pmoe.launcher.simulators`: comma separated list of simulator of UDIDs to run the app on.\n- `-Pmoe.launcher.options`: comma separated list of options.\n    Options:\n    - `config`: overrides the default configuration of release, supported values: debug, release.\n    - `no-wait-device`: tells the device launcher not to wait for devices if they're not connected.\n    - `no-build`: tells the task not to build the project before launch. This requires an already existing build with\n    the correct configuration.\n    - `no-launch`: tells the task not to launch the app. This is useful when you only want to build for your target\n    devices and want to run as a separate step.\n    - `install-on-target`: forces application to be installed on the target device. Mostly used in combination with\n    `no-launch`.\n    - `no-install-on-target`: skips installation of the application. Mostly used in combination with `no-build`.\n    - `debug`: tells the device and simulator launchers to launch with JDWP. Parameters for this option `\u003clocal-port\u003e`\n    or `\u003clocal-port\u003e:\u003cremote-port\u003e`. Remote port only has an effect when launching on devices.\n    - `arg`: passes the specified argument to the application.\n    - `vmarg`: passes a VM argument to the application.\n    - `env`: passes an environmental variable to the application (format: `key=value`).\n    - `proxy`: creates a proxy server on the host to the device. Parameters are the same as for `debug`.\n    - `raw-test-output`: print all test output to stdout/stderr instead of creating reports.\n\nIf neither `-Pmoe.launcher.devices` and `-Pmoe.launcher.simulators` is set, then the task will try to launch on the\nfirst available device.\n\n#### Examples\n\nBuild for and launch on the first available device:\n\n```bash\n./gradlew moeLaunch\n```\n\nDon't build and launch a debug session (with JDWP on port 5005) on simulator:\n\n```bash\n./gradlew moeLaunch -Pmoe.launcher.simulators=XXXXXXXXXXXX -Pmoe.launcher.options=no-build,debug:5005\n```\n\n---\n\n### Test Task\n\nTask name: `moeTest`\n\nThis task builds and runs the test target of this application on the specified device(s) and/or simulator(s). The\ncontrolling project properties are the same as for the Launch task.\n\n---\n\n### ConfigRemote Task\n\nTask name: `moeConfigRemote`\n\nThis task run an interactive command-line utility for configuring and testing remote server connection and\nauthentication.\n\n---\n\n### TestRemote Task\n\nTask name: `moeTestRemote`\n\nThis task tests the connection to the remote server.\n\n---\n\n### RemoteServerSetup Task\n\nTask name: `moeRemoteServerSetup`\n\nThis task ensures the remote system has the MOE SDK installed properly. This task will run before the first task that\nwould use the remote connection.\n\n## Remote Server Settings\n\nThe following settings are available for configuring the remote connection:\n\n- `host`: address of the remote build server.\n- `port`: port for ssh, defaults to 22.\n- `user`: user on the remote build server.\n- `identity`: path to private key.\n- `knownhosts`: path to known_hosts file.\n- `keychain.name`: name of keychain to unlock, defaults to 'moeremotebuild.keychain'.\n- `keychain.pass`: password for keychain, defaults to ''.\n- `keychain.locktimeout`: keychain lock timeout in seconds, defaults to 3600.\n- `gradle.repositories`: repositories to be used when setting up the MOE SDK on the remote server, defaults to\n'mavenCentral()'.\n\nThe identity and knownhosts keys accept special parameters to access environmental variables (`$env$KEY`),\nsystem properties (`$sys$KEY`) and project properties (`$proj$KEY`).\n\nExample: `knownhosts=$sys$user.home/.ssh/known_hosts`\n\nAll of these properties can be overridden from command-line with `-Pmoe.remotebuild.\u003csetting\u003e=\u003cvalue\u003e`.\nThe `moe.remotebuild.properties` file can be completely ignored by passing the `-Pmoe.remotebuild.properties.ignore`\nparameter.\n\n---\n\n### NatJGen Task\n\nTask name: `moeNatJGen`\n\nThis task runs the NatJ binding generator with specified configuration. Allowed configuration formats: *.natjgen and *.nbc\nThe following settings are available for configuring the binding generator:\n\n```groovy\nmoe {\n    natjgen {\n        config 'sample.natjgen'\n        logFile 'binding/logs/natjgen-${DATETIME}.html'\n     }\n}\n```\n\n---\n\n### UpdateXcodeSettings Task\n\nTask name: `moeUpdateXcodeSettings`\n\nThis task adjusts Xcode project settings for the current Moe configuration/version. This should be ran after you\nchange the Moe plugin settings, or update Moe plugin version in Gradle.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmulti-os-engine%2Fmoe-plugin-gradle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmulti-os-engine%2Fmoe-plugin-gradle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmulti-os-engine%2Fmoe-plugin-gradle/lists"}