From f16f6feac92b3f435571f9e6e415cbcde79f0ae8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20B=20M=C3=A5rtensson?= <53905247+Jon-b-m@users.noreply.github.com> Date: Fri, 5 Nov 2021 05:34:48 +0100 Subject: [PATCH 001/178] Crowdin updates (#9) * Crowdin updates * Crowdin updates and Finnish re-selected again in Xcode settings * Finnish strings * Italian, Swedish, Finnish, Spanish * Adding Hebrew * fix file * Revert "Adding Hebrew" This reverts commit d9710f09c69db5caeff37aed0643b83c69d06a9b. Removed submodule Loop * Revert Hebrew * Hebrew added * Norwegian * Localizations * Localization updates * Revert loopkit commit * Revert * Crowdin updates Crowdin updates and Finnish re-selected again in Xcode settings Finnish strings Italian, Swedish, Finnish, Spanish Adding Hebrew fix file Revert "Adding Hebrew" This reverts commit d9710f09c69db5caeff37aed0643b83c69d06a9b. Removed submodule Loop Revert Hebrew Hebrew added Norwegian Localizations Localization updates Revert loopkit commit Revert * Loop translations --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 0641c67b5..c6ba698aa 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 0641c67b5fd37fad81768e75e51c84f1c37f8726 +Subproject commit c6ba698aaf84b4510563fcd7b3f86f6a51f81d48 From effebf9844ba6ad6a8508c42db97bca84fdcb09e Mon Sep 17 00:00:00 2001 From: Marion Barker Date: Fri, 5 Nov 2021 06:20:01 -0700 Subject: [PATCH 002/178] Revert "Crowdin updates (#9)" (#11) This reverts commit f16f6feac92b3f435571f9e6e415cbcde79f0ae8. --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index c6ba698aa..0641c67b5 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit c6ba698aaf84b4510563fcd7b3f86f6a51f81d48 +Subproject commit 0641c67b5fd37fad81768e75e51c84f1c37f8726 From 10ce5c40baee8703cdad828666cbba9e2f01c24e Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 5 Nov 2021 06:42:42 -0700 Subject: [PATCH 003/178] Norwegian and other Crowdin updates (#12) and (#11) --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 0641c67b5..a228dc0e6 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 0641c67b5fd37fad81768e75e51c84f1c37f8726 +Subproject commit a228dc0e646ea65c67d913fdc4024b2496ee004b From 16c0bd9212a094086f6f6dffa71bbc0ab788ab90 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 5 Nov 2021 16:12:58 -0700 Subject: [PATCH 004/178] A few Hebrew, Spanish and Swedish localizations --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index a228dc0e6..bda3d9f56 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit a228dc0e646ea65c67d913fdc4024b2496ee004b +Subproject commit bda3d9f56ba7733808fe54d1925fdf6561f49d49 From 18853a7ffab9023fa4a7cd4c65209f79d9c6fc55 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 5 Nov 2021 17:17:21 -0700 Subject: [PATCH 005/178] Crowdin updates. Missing strings added and translations --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index bda3d9f56..445b72552 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit bda3d9f56ba7733808fe54d1925fdf6561f49d49 +Subproject commit 445b7255251295219e188086c2ec9d60eb3bd9c6 From 2a3dacccefe750b2f3387f0761ce3289bdc9e023 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 7 Nov 2021 12:50:46 -0800 Subject: [PATCH 006/178] Update submodule for Time Machine Fix and Crowdin updates --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 445b72552..dea06a797 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 445b7255251295219e188086c2ec9d60eb3bd9c6 +Subproject commit dea06a7972f21b2b2eb2b82cfee22d5faaacbb22 From fd372e30863fc5d1634dfc4b754d4cf2fd09d386 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 7 Nov 2021 16:38:54 -0800 Subject: [PATCH 007/178] Update submodule Loop: more Xcode settings and file fix for localization --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index dea06a797..00d60c2ea 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit dea06a7972f21b2b2eb2b82cfee22d5faaacbb22 +Subproject commit 00d60c2eac3b6dd721ffb4cf22d7ac12d61bd161 From b0eca467279339325f02fcddc8b9dcaea083ef6b Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 10 Nov 2021 08:13:19 -0800 Subject: [PATCH 008/178] update submodule rileylink_ios to point to loopnlearn repo, no change to code --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 1540d5840..95a1ac484 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,7 +19,7 @@ url = https://github.com/LoopKit/G4ShareSpy.git [submodule "rileylink_ios"] path = rileylink_ios - url = https://github.com/ps2/rileylink_ios.git + url = https://github.com/loopnlearn/rileylink_ios.git [submodule "Amplitude-iOS"] path = Amplitude-iOS url = https://github.com/LoopKit/Amplitude-iOS.git @@ -33,4 +33,4 @@ [submodule "xdrip-client-swift"] path = xdrip-client-swift url = https://github.com/alekst1d/xdrip-client-swift - branch = master \ No newline at end of file + branch = master From 92f3676c17243da54aaabc24febf93798a8e6cd6 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 10 Nov 2021 08:37:45 -0800 Subject: [PATCH 009/178] update submodule rileylink_ios: add ema/orange patch --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 15d19970f..b623d7aa3 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 15d19970f589d1678a486a9b7cfa2430111ee3ea +Subproject commit b623d7aa3cc6d29923295c73633cabd356c6dc54 From c598909e5af3bd4fb7981c57e74221ae20205e98 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 10 Nov 2021 10:14:55 -0800 Subject: [PATCH 010/178] update submodule Loop: version FreeAPS v2.2 (203) --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 00d60c2ea..b0ef43d48 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 00d60c2eac3b6dd721ffb4cf22d7ac12d61bd161 +Subproject commit b0ef43d481cef67f7e09ccec749ca5dddbdf743b From 176bbcc2e240d682d6c1caabf3082d5352c9d823 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 10 Nov 2021 10:53:27 -0800 Subject: [PATCH 011/178] update submodule Loop: Crowdin Localizations and Xcode localization settings --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index b0ef43d48..acb63ae04 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit b0ef43d481cef67f7e09ccec749ca5dddbdf743b +Subproject commit acb63ae047e7ae62f88fd171f09230a67d98e92e From c31a5eab74c3e2c05f58fafecbb15d7f8b1aba46 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 11 Nov 2021 04:40:43 -0800 Subject: [PATCH 012/178] update submodule Loop: localization updates --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index acb63ae04..aef0c0125 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit acb63ae047e7ae62f88fd171f09230a67d98e92e +Subproject commit aef0c01259d4422f223e50ac1e8216135c7ec74d From 4a1aad9cd8e9ea9abe8027fc02927dea305df5fb Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 11 Nov 2021 05:23:47 -0800 Subject: [PATCH 013/178] README: add links and copy blocks to use build-select script --- README.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2e039e17a..5f55f4d1d 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,65 @@ There are so many people who rely on the FreeAPS fork of Loop that it has been forked again to the loopnlearn github site. There are no guarantees as to how long this support can be maintained, but the loopnlearn team will do their best and are willing to accept pull requests. -Ivan - the originator of the FreeAPS project (ivalkou github site) has frozen his repository. All the forces of Ivan's team are aimed at developing a new project FreeAPS X based on OpenAPS. +Ivan - the originator of the FreeAPS project (ivalkou github site) has frozen his repository. All the forces of Ivan's team are aimed at developing a new project FreeAPS X based on OpenAPS. +# LoopWorkspace - Build Using Script -# LoopWorkspace +To simplify building FreeAPS, the loopnlearn team developed a script. It works for Loop and for FreeAPS and is documented in two places. (LoopDocs has more details and graphics - both sites have the same information.) + +**If you have not already ensured your macOS and Xcode versions are consistent with your iPhone iOS, please use these links and follow the instructions.** + +* Loop and Learn website: [Build Select Script](https://www.loopandlearn.org/build-select/) +* LoopDocs website: [LoopDocs Updating](https://loopkit.github.io/loopdocs/build/updating) + +There is a copy button located by hovering on the right-hand side of the text blocks below. Click on it, all the words in the block are copied into your paste buffer, and then you can paste the words into the terminal. + +## Run Script - Answer the Questions + +First time users should run the script and answer the questions. Copy, paste and hit enter in a terminal. + +``` title="Execute Utilities to Clean Profiles and Derived Data" +/bin/bash -c "$(curl -fsSL https://git.io/JImiE)" +``` + +## One-Step Actions + +For experienced users who have already verified their macOS and Xcode versions, two one-step copy blocks are provided to perform the two actions required for a rebuild. Paste each set of commands into a terminal. Review output for errors - if there are errors, please use the LoopDocs link. + +The # symbol is simply there so you do not need to hit enter after the final input in this buffer. There will be a # showing in the terminal window when done. You can either hit return or backspace to clear it. + +### Clean Profiles and Derived Data + +This starts the script and answers the questions to run the utility to give you a full-year of the app if you have a paid Apple Developer ID and clean out Derived Data from previous Xcode activity on your computer. + +``` title="Execute Utilities to Clean Profiles and Derived Data" +/bin/bash -c "$(curl -fsSL https://git.io/JImiE)" +1 +3 +3 +# +``` + +### Download FreeAPS and Open Xcode + +This starts the script and answers the questions to download the FreeAPS code (LoopWorkspace branch=freeaps). + +Once downloaded (in the ~/Downloads/BuildLoop folder), the script: +* Opens Xcode in the correct directory +* Opens browser showing a helpful graphic of build steps + +``` title="Download FreeAPS and Open Xcode" +/bin/bash -c "$(curl -fsSL https://git.io/JImiE)" +1 +1 +2 +1 +# +``` + +# LoopWorkspace - Manual Build + +This section has the manual steps if you do not choose to use the script. ## Clone From 82c0d18235e0381a2577b9490f18ad5c9724752e Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 11 Nov 2021 05:29:22 -0800 Subject: [PATCH 014/178] update submodule rileylink_ios: localization updates --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index b623d7aa3..b4f5636af 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit b623d7aa3cc6d29923295c73633cabd356c6dc54 +Subproject commit b4f5636af9fb5701e0aefb0cfe9618de52e28d77 From ec56052017288bb9e93d25f95acba356e05cecf9 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 11 Nov 2021 05:49:11 -0800 Subject: [PATCH 015/178] README: update code blocks --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 5f55f4d1d..a82394e6e 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ There is a copy button located by hovering on the right-hand side of the text bl ## Run Script - Answer the Questions -First time users should run the script and answer the questions. Copy, paste and hit enter in a terminal. +First time users should run the script and answer the questions. Copy and paste in a terminal. ``` title="Execute Utilities to Clean Profiles and Derived Data" /bin/bash -c "$(curl -fsSL https://git.io/JImiE)" @@ -27,7 +27,6 @@ First time users should run the script and answer the questions. Copy, paste and For experienced users who have already verified their macOS and Xcode versions, two one-step copy blocks are provided to perform the two actions required for a rebuild. Paste each set of commands into a terminal. Review output for errors - if there are errors, please use the LoopDocs link. -The # symbol is simply there so you do not need to hit enter after the final input in this buffer. There will be a # showing in the terminal window when done. You can either hit return or backspace to clear it. ### Clean Profiles and Derived Data @@ -38,7 +37,6 @@ This starts the script and answers the questions to run the utility to give you 1 3 3 -# ``` ### Download FreeAPS and Open Xcode @@ -55,7 +53,6 @@ Once downloaded (in the ~/Downloads/BuildLoop folder), the script: 1 2 1 -# ``` # LoopWorkspace - Manual Build From c140c10e78036d7b008c43729d25427899d19e9a Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 11 Nov 2021 05:56:31 -0800 Subject: [PATCH 016/178] remove fastlane --- fastlane/Appfile.swift | 9 - fastlane/Fastfile.swift | 24 - fastlane/swift/Actions.swift | 15 - fastlane/swift/Appfile.swift | 17 - fastlane/swift/ArgumentProcessor.swift | 93 - fastlane/swift/ControlCommand.swift | 77 - fastlane/swift/Deliverfile.swift | 21 - fastlane/swift/DeliverfileProtocol.swift | 248 - fastlane/swift/Fastfile.swift | 12 - fastlane/swift/Fastlane.swift | 8989 ----------------- .../project.pbxproj | 434 - .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcschemes/FastlaneRunner.xcscheme | 103 - fastlane/swift/FastlaneSwiftRunner/README.txt | 10 - fastlane/swift/Gymfile.swift | 21 - fastlane/swift/GymfileProtocol.swift | 184 - fastlane/swift/LaneFileProtocol.swift | 140 - fastlane/swift/Matchfile.swift | 21 - fastlane/swift/MatchfileProtocol.swift | 160 - fastlane/swift/Plugins.swift | 15 - fastlane/swift/Precheckfile.swift | 21 - fastlane/swift/PrecheckfileProtocol.swift | 36 - fastlane/swift/RubyCommand.swift | 161 - fastlane/swift/RubyCommandable.swift | 47 - fastlane/swift/Runner.swift | 279 - fastlane/swift/RunnerArgument.swift | 24 - fastlane/swift/Scanfile.swift | 21 - fastlane/swift/ScanfileProtocol.swift | 260 - fastlane/swift/Screengrabfile.swift | 21 - fastlane/swift/ScreengrabfileProtocol.swift | 96 - fastlane/swift/Snapshotfile.swift | 21 - fastlane/swift/SnapshotfileProtocol.swift | 176 - fastlane/swift/SocketClient.swift | 331 - .../swift/SocketClientDelegateProtocol.swift | 25 - fastlane/swift/SocketResponse.swift | 86 - fastlane/swift/main.swift | 51 - fastlane/swift/upgrade_manifest.json | 1 - 38 files changed, 12265 deletions(-) delete mode 100644 fastlane/Appfile.swift delete mode 100644 fastlane/Fastfile.swift delete mode 100644 fastlane/swift/Actions.swift delete mode 100644 fastlane/swift/Appfile.swift delete mode 100644 fastlane/swift/ArgumentProcessor.swift delete mode 100644 fastlane/swift/ControlCommand.swift delete mode 100644 fastlane/swift/Deliverfile.swift delete mode 100644 fastlane/swift/DeliverfileProtocol.swift delete mode 100644 fastlane/swift/Fastfile.swift delete mode 100644 fastlane/swift/Fastlane.swift delete mode 100644 fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj delete mode 100644 fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme delete mode 100644 fastlane/swift/FastlaneSwiftRunner/README.txt delete mode 100644 fastlane/swift/Gymfile.swift delete mode 100644 fastlane/swift/GymfileProtocol.swift delete mode 100644 fastlane/swift/LaneFileProtocol.swift delete mode 100644 fastlane/swift/Matchfile.swift delete mode 100644 fastlane/swift/MatchfileProtocol.swift delete mode 100644 fastlane/swift/Plugins.swift delete mode 100644 fastlane/swift/Precheckfile.swift delete mode 100644 fastlane/swift/PrecheckfileProtocol.swift delete mode 100644 fastlane/swift/RubyCommand.swift delete mode 100644 fastlane/swift/RubyCommandable.swift delete mode 100644 fastlane/swift/Runner.swift delete mode 100644 fastlane/swift/RunnerArgument.swift delete mode 100644 fastlane/swift/Scanfile.swift delete mode 100644 fastlane/swift/ScanfileProtocol.swift delete mode 100644 fastlane/swift/Screengrabfile.swift delete mode 100644 fastlane/swift/ScreengrabfileProtocol.swift delete mode 100644 fastlane/swift/Snapshotfile.swift delete mode 100644 fastlane/swift/SnapshotfileProtocol.swift delete mode 100644 fastlane/swift/SocketClient.swift delete mode 100644 fastlane/swift/SocketClientDelegateProtocol.swift delete mode 100644 fastlane/swift/SocketResponse.swift delete mode 100644 fastlane/swift/main.swift delete mode 100644 fastlane/swift/upgrade_manifest.json diff --git a/fastlane/Appfile.swift b/fastlane/Appfile.swift deleted file mode 100644 index c87d875de..000000000 --- a/fastlane/Appfile.swift +++ /dev/null @@ -1,9 +0,0 @@ -var appIdentifier: String { return "com.BA7ZHP4963.loopkit.Loop" } // The bundle identifier of your app -var appleID: String { return "ivalkou@gmail.com" } // Your Apple email address - -var itcTeam: String? { return "2082062" } // App Store Connect Team ID -var teamID: String { return "BA7ZHP4963" } // Apple Developer Portal Team ID - - -// For more information about the Appfile, see: -// https://docs.fastlane.tools/advanced/#appfile diff --git a/fastlane/Fastfile.swift b/fastlane/Fastfile.swift deleted file mode 100644 index 67cbe5180..000000000 --- a/fastlane/Fastfile.swift +++ /dev/null @@ -1,24 +0,0 @@ -// This file contains the fastlane.tools configuration -// You can find the documentation at https://docs.fastlane.tools -// -// For a list of all available actions, check out -// -// https://docs.fastlane.tools/actions -// - -import Foundation - -class Fastfile: LaneFile { - func archiveLane() { - desc("Archive") - - let project = "Loop/Loop.xcodeproj" - let scheme = "Loop (Workspace)" - let version = "2.1" - let buildNumber = numberOfCommits() - - incrementVersionNumber(versionNumber: version, xcodeproj: project) - incrementBuildNumber(buildNumber: buildNumber, xcodeproj: project) - buildApp(scheme: scheme, clean: true, skipPackageIpa: true) - } -} diff --git a/fastlane/swift/Actions.swift b/fastlane/swift/Actions.swift deleted file mode 100644 index 2c2a74b80..000000000 --- a/fastlane/swift/Actions.swift +++ /dev/null @@ -1,15 +0,0 @@ -// This class is automatically included in FastlaneRunner during build - -// This autogenerated file will be overwritten or replaced when running "fastlane generate_swift" -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Foundation - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.56] diff --git a/fastlane/swift/Appfile.swift b/fastlane/swift/Appfile.swift deleted file mode 100644 index 5a9bd4351..000000000 --- a/fastlane/swift/Appfile.swift +++ /dev/null @@ -1,17 +0,0 @@ -// This class is automatically included in FastlaneRunner during build -// If you have a custom Appfile.swift, this file will be replaced by it -// Don't modify this file unless you are familiar with how fastlane's swift code generation works -// *** This file will be overwritten or replaced during build time *** - -var appIdentifier: String { return "" } // The bundle identifier of your app -var appleID: String { return "" } // Your Apple email address - -var teamID: String { return "" } // Developer Portal Team ID -var itcTeam: String? { return nil } // App Store Connect Team ID (may be nil if no team) - -// you can even provide different app identifiers, Apple IDs and team names per lane: -// More information: https://docs.fastlane.tools/advanced/#appfile - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.1] diff --git a/fastlane/swift/ArgumentProcessor.swift b/fastlane/swift/ArgumentProcessor.swift deleted file mode 100644 index 6cd3d57b0..000000000 --- a/fastlane/swift/ArgumentProcessor.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// ArgumentProcessor.swift -// FastlaneRunner -// -// Created by Joshua Liebowitz on 9/28/17. -// - -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Foundation - -struct ArgumentProcessor { - let args: [RunnerArgument] - let currentLane: String - let commandTimeout: Int - let port: UInt32 - - init(args: [String]) { - // Dump the first arg which is the program name - let fastlaneArgs = stride(from: 1, to: args.count - 1, by: 2).map { - RunnerArgument(name: args[$0], value: args[$0 + 1]) - } - self.args = fastlaneArgs - - let fastlaneArgsMinusLanes = fastlaneArgs.filter { arg in - arg.name.lowercased() != "lane" - } - - let potentialLogMode = fastlaneArgsMinusLanes.filter { arg in - arg.name.lowercased() == "logmode" - } - - port = UInt32(fastlaneArgsMinusLanes.first(where: { $0.name == "swiftServerPort" })?.value ?? "") ?? 2000 - - // Configure logMode since we might need to use it before we finish parsing - if let logModeArg = potentialLogMode.first { - let logModeString = logModeArg.value - Logger.logMode = Logger.LogMode(logMode: logModeString) - } - - let lanes = self.args.filter { arg in - arg.name.lowercased() == "lane" - } - verbose(message: lanes.description) - - guard lanes.count == 1 else { - let message = "You must have exactly one lane specified as an arg, here's what I got: \(lanes)" - log(message: message) - fatalError(message) - } - - let lane = lanes.first! - currentLane = lane.value - - // User might have configured a timeout for the socket connection - let potentialTimeout = fastlaneArgsMinusLanes.filter { arg in - arg.name.lowercased() == "timeoutseconds" - } - - if let logModeArg = potentialLogMode.first { - let logModeString = logModeArg.value - Logger.logMode = Logger.LogMode(logMode: logModeString) - } - - if let timeoutArg = potentialTimeout.first { - let timeoutString = timeoutArg.value - commandTimeout = (timeoutString as NSString).integerValue - } else { - commandTimeout = SocketClient.defaultCommandTimeoutSeconds - } - } - - func laneParameters() -> [String: String] { - let laneParametersArgs = args.filter { arg in - let lowercasedName = arg.name.lowercased() - return lowercasedName != "timeoutseconds" && lowercasedName != "lane" && lowercasedName != "logmode" - } - var laneParameters = [String: String]() - for arg in laneParametersArgs { - laneParameters[arg.name] = arg.value - } - return laneParameters - } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.2] diff --git a/fastlane/swift/ControlCommand.swift b/fastlane/swift/ControlCommand.swift deleted file mode 100644 index d10e68a5f..000000000 --- a/fastlane/swift/ControlCommand.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// ControlCommand.swift -// FastlaneRunner -// -// Created by Joshua Liebowitz on 1/3/18. - -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Foundation - -struct ControlCommand: RubyCommandable { - static let commandKey = "command" - var type: CommandType { return .control } - - enum ShutdownCommandType { - static let userMessageKey: String = "userMessage" - - enum CancelReason { - static let reasonKey: String = "reason" - case clientError - case serverError - - var reasonText: String { - switch self { - case .clientError: - return "clientError" - case .serverError: - return "serverError" - } - } - } - - case done - case cancel(cancelReason: CancelReason) - - var token: String { - switch self { - case .done: - return "done" - case .cancel: - return "cancelFastlaneRun" - } - } - } - - let message: String? - let id: String = UUID().uuidString - let shutdownCommandType: ShutdownCommandType - var commandJson: String { - var jsonDictionary: [String: Any] = [ControlCommand.commandKey: shutdownCommandType.token] - - if let message = message { - jsonDictionary[ShutdownCommandType.userMessageKey] = message - } - if case let .cancel(reason) = shutdownCommandType { - jsonDictionary[ShutdownCommandType.CancelReason.reasonKey] = reason.reasonText - } - - let jsonData = try! JSONSerialization.data(withJSONObject: jsonDictionary, options: []) - let jsonString = String(data: jsonData, encoding: .utf8)! - return jsonString - } - - init(commandType: ShutdownCommandType, message: String? = nil) { - shutdownCommandType = commandType - self.message = message - } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.2] diff --git a/fastlane/swift/Deliverfile.swift b/fastlane/swift/Deliverfile.swift deleted file mode 100644 index 5715b0150..000000000 --- a/fastlane/swift/Deliverfile.swift +++ /dev/null @@ -1,21 +0,0 @@ -// This class is automatically included in FastlaneRunner during build - -// This autogenerated file will be overwritten or replaced during build time, or when you initialize `deliver` -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -class Deliverfile: DeliverfileProtocol { -// If you want to enable `deliver`, run `fastlane deliver init` -// After, this file will be replaced with a custom implementation that contains values you supplied -// during the `init` process, and you won't see this message -} - - - - - -// Generated with fastlane 2.135.2 diff --git a/fastlane/swift/DeliverfileProtocol.swift b/fastlane/swift/DeliverfileProtocol.swift deleted file mode 100644 index 5865f2936..000000000 --- a/fastlane/swift/DeliverfileProtocol.swift +++ /dev/null @@ -1,248 +0,0 @@ -protocol DeliverfileProtocol: class { - /// Your Apple ID Username - var username: String { get } - - /// The bundle identifier of your app - var appIdentifier: String? { get } - - /// The version that should be edited or created - var appVersion: String? { get } - - /// Path to your ipa file - var ipa: String? { get } - - /// Path to your pkg file - var pkg: String? { get } - - /// If set the given build number (already uploaded to iTC) will be used instead of the current built one - var buildNumber: String? { get } - - /// The platform to use (optional) - var platform: String { get } - - /// Modify live metadata, this option disables ipa upload and screenshot upload - var editLive: Bool { get } - - /// Force usage of live version rather than edit version - var useLiveVersion: Bool { get } - - /// Path to the folder containing the metadata files - var metadataPath: String? { get } - - /// Path to the folder containing the screenshots - var screenshotsPath: String? { get } - - /// Skip uploading an ipa or pkg to App Store Connect - var skipBinaryUpload: Bool { get } - - /// Don't upload the screenshots - var skipScreenshots: Bool { get } - - /// Don't upload the metadata (e.g. title, description). This will still upload screenshots - var skipMetadata: Bool { get } - - /// Don't update app version for submission - var skipAppVersionUpdate: Bool { get } - - /// Skip the HTML report file verification - var force: Bool { get } - - /// Clear all previously uploaded screenshots before uploading the new ones - var overwriteScreenshots: Bool { get } - - /// Submit the new version for Review after uploading everything - var submitForReview: Bool { get } - - /// Rejects the previously submitted build if it's in a state where it's possible - var rejectIfPossible: Bool { get } - - /// Should the app be automatically released once it's approved? (Can not be used together with `auto_release_date`) - var automaticRelease: Bool { get } - - /// Date in milliseconds for automatically releasing on pending approval (Can not be used together with `automatic_release`) - var autoReleaseDate: Int? { get } - - /// Enable the phased release feature of iTC - var phasedRelease: Bool { get } - - /// Reset the summary rating when you release a new version of the application - var resetRatings: Bool { get } - - /// The price tier of this application - var priceTier: String? { get } - - /// Path to the app rating's config - var appRatingConfigPath: String? { get } - - /// Extra information for the submission (e.g. compliance specifications, IDFA settings) - var submissionInformation: [String: Any]? { get } - - /// The ID of your App Store Connect team if you're in multiple teams - var teamId: String? { get } - - /// The name of your App Store Connect team if you're in multiple teams - var teamName: String? { get } - - /// The short ID of your Developer Portal team, if you're in multiple teams. Different from your iTC team ID! - var devPortalTeamId: String? { get } - - /// The name of your Developer Portal team if you're in multiple teams - var devPortalTeamName: String? { get } - - /// The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column - var itcProvider: String? { get } - - /// Run precheck before submitting to app review - var runPrecheckBeforeSubmit: Bool { get } - - /// The default precheck rule level unless otherwise configured - var precheckDefaultRuleLevel: String { get } - - /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - An array of localized metadata items to upload individually by language so that errors can be identified. E.g. ['name', 'keywords', 'description']. Note: slow - var individualMetadataItems: [String]? { get } - - /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the app icon - var appIcon: String? { get } - - /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the Apple Watch app icon - var appleWatchAppIcon: String? { get } - - /// Metadata: The copyright notice - var copyright: String? { get } - - /// Metadata: The english name of the primary category (e.g. `Business`, `Books`) - var primaryCategory: String? { get } - - /// Metadata: The english name of the secondary category (e.g. `Business`, `Books`) - var secondaryCategory: String? { get } - - /// Metadata: The english name of the primary first sub category (e.g. `Educational`, `Puzzle`) - var primaryFirstSubCategory: String? { get } - - /// Metadata: The english name of the primary second sub category (e.g. `Educational`, `Puzzle`) - var primarySecondSubCategory: String? { get } - - /// Metadata: The english name of the secondary first sub category (e.g. `Educational`, `Puzzle`) - var secondaryFirstSubCategory: String? { get } - - /// Metadata: The english name of the secondary second sub category (e.g. `Educational`, `Puzzle`) - var secondarySecondSubCategory: String? { get } - - /// Metadata: A hash containing the trade representative contact information - var tradeRepresentativeContactInformation: [String: Any]? { get } - - /// Metadata: A hash containing the review information - var appReviewInformation: [String: Any]? { get } - - /// Metadata: Path to the app review attachment file - var appReviewAttachmentFile: String? { get } - - /// Metadata: The localised app description - var description: String? { get } - - /// Metadata: The localised app name - var name: String? { get } - - /// Metadata: The localised app subtitle - var subtitle: [String: Any]? { get } - - /// Metadata: An array of localised keywords - var keywords: [String: Any]? { get } - - /// Metadata: An array of localised promotional texts - var promotionalText: [String: Any]? { get } - - /// Metadata: Localised release notes for this version - var releaseNotes: String? { get } - - /// Metadata: Localised privacy url - var privacyUrl: String? { get } - - /// Metadata: Localised Apple TV privacy policy text - var appleTvPrivacyPolicy: String? { get } - - /// Metadata: Localised support url - var supportUrl: String? { get } - - /// Metadata: Localised marketing url - var marketingUrl: String? { get } - - /// Metadata: List of languages to activate - var languages: [String]? { get } - - /// Ignore errors when invalid languages are found in metadata and screenshot directories - var ignoreLanguageDirectoryValidation: Bool { get } - - /// Should precheck check in-app purchases? - var precheckIncludeInAppPurchases: Bool { get } - - /// The (spaceship) app ID of the app you want to use/modify - var app: String { get } -} - -extension DeliverfileProtocol { - var username: String { return "" } - var appIdentifier: String? { return nil } - var appVersion: String? { return nil } - var ipa: String? { return nil } - var pkg: String? { return nil } - var buildNumber: String? { return nil } - var platform: String { return "ios" } - var editLive: Bool { return false } - var useLiveVersion: Bool { return false } - var metadataPath: String? { return nil } - var screenshotsPath: String? { return nil } - var skipBinaryUpload: Bool { return false } - var skipScreenshots: Bool { return false } - var skipMetadata: Bool { return false } - var skipAppVersionUpdate: Bool { return false } - var force: Bool { return false } - var overwriteScreenshots: Bool { return false } - var submitForReview: Bool { return false } - var rejectIfPossible: Bool { return false } - var automaticRelease: Bool { return false } - var autoReleaseDate: Int? { return nil } - var phasedRelease: Bool { return false } - var resetRatings: Bool { return false } - var priceTier: String? { return nil } - var appRatingConfigPath: String? { return nil } - var submissionInformation: [String: Any]? { return nil } - var teamId: String? { return nil } - var teamName: String? { return nil } - var devPortalTeamId: String? { return nil } - var devPortalTeamName: String? { return nil } - var itcProvider: String? { return nil } - var runPrecheckBeforeSubmit: Bool { return true } - var precheckDefaultRuleLevel: String { return "warn" } - var individualMetadataItems: [String]? { return nil } - var appIcon: String? { return nil } - var appleWatchAppIcon: String? { return nil } - var copyright: String? { return nil } - var primaryCategory: String? { return nil } - var secondaryCategory: String? { return nil } - var primaryFirstSubCategory: String? { return nil } - var primarySecondSubCategory: String? { return nil } - var secondaryFirstSubCategory: String? { return nil } - var secondarySecondSubCategory: String? { return nil } - var tradeRepresentativeContactInformation: [String: Any]? { return nil } - var appReviewInformation: [String: Any]? { return nil } - var appReviewAttachmentFile: String? { return nil } - var description: String? { return nil } - var name: String? { return nil } - var subtitle: [String: Any]? { return nil } - var keywords: [String: Any]? { return nil } - var promotionalText: [String: Any]? { return nil } - var releaseNotes: String? { return nil } - var privacyUrl: String? { return nil } - var appleTvPrivacyPolicy: String? { return nil } - var supportUrl: String? { return nil } - var marketingUrl: String? { return nil } - var languages: [String]? { return nil } - var ignoreLanguageDirectoryValidation: Bool { return false } - var precheckIncludeInAppPurchases: Bool { return true } - var app: String { return "" } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.25] diff --git a/fastlane/swift/Fastfile.swift b/fastlane/swift/Fastfile.swift deleted file mode 100644 index 024480d84..000000000 --- a/fastlane/swift/Fastfile.swift +++ /dev/null @@ -1,12 +0,0 @@ -// This class is automatically included in FastlaneRunner during build -// If you have a custom Fastfile.swift, this file will be replaced by it -// Don't modify this file unless you are familiar with how fastlane's swift code generation works -// *** This file will be overwritten or replaced during build time *** - -import Foundation - -class Fastfile: LaneFile { } - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.1] diff --git a/fastlane/swift/Fastlane.swift b/fastlane/swift/Fastlane.swift deleted file mode 100644 index c7734512c..000000000 --- a/fastlane/swift/Fastlane.swift +++ /dev/null @@ -1,8989 +0,0 @@ -import Foundation -/** - Run ADB Actions - - - parameters: - - serial: Android serial of the device to use for this command - - command: All commands you want to pass to the adb command, e.g. `kill-server` - - adbPath: The path to your `adb` binary (can be left blank if the ANDROID_SDK_ROOT environment variable is set) - - - returns: The output of the adb command - - see adb --help for more details - */ -@discardableResult func adb(serial: String = "", - command: String? = nil, - adbPath: String = "adb") -> String { - let command = RubyCommand(commandID: "", methodName: "adb", className: nil, args: [RubyCommand.Argument(name: "serial", value: serial), - RubyCommand.Argument(name: "command", value: command), - RubyCommand.Argument(name: "adb_path", value: adbPath)]) - return runner.executeCommand(command) -} - -/** - Get an array of Connected android device serials - - - parameter adbPath: The path to your `adb` binary (can be left blank if the ANDROID_SDK_ROOT environment variable is set) - - - returns: Returns an array of all currently connected android devices. Example: [] - - Fetches device list via adb, e.g. run an adb command on all connected devices. - */ -func adbDevices(adbPath: String = "adb") { - let command = RubyCommand(commandID: "", methodName: "adb_devices", className: nil, args: [RubyCommand.Argument(name: "adb_path", value: adbPath)]) - _ = runner.executeCommand(command) -} - -/** - Modify the default list of supported platforms - - - parameter platforms: The optional extra platforms to support - */ -func addExtraPlatforms(platforms: [String] = []) { - let command = RubyCommand(commandID: "", methodName: "add_extra_platforms", className: nil, args: [RubyCommand.Argument(name: "platforms", value: platforms)]) - _ = runner.executeCommand(command) -} - -/** - This will add an annotated git tag to the current branch - - - parameters: - - tag: Define your own tag text. This will replace all other parameters - - grouping: Is used to keep your tags organised under one 'folder' - - prefix: Anything you want to put in front of the version number (e.g. 'v') - - postfix: Anything you want to put at the end of the version number (e.g. '-RC1') - - buildNumber: The build number. Defaults to the result of increment_build_number if you're using it - - message: The tag message. Defaults to the tag's name - - commit: The commit or object where the tag will be set. Defaults to the current HEAD - - force: Force adding the tag - - sign: Make a GPG-signed tag, using the default e-mail address's key - - This will automatically tag your build with the following format: `//`, where:| - | - >- `grouping` is just to keep your tags organised under one 'folder', defaults to 'builds'| - - `lane` is the name of the current fastlane lane| - - `prefix` is anything you want to stick in front of the version number, e.g. 'v'| - - `postfix` is anything you want to stick at the end of the version number, e.g. '-RC1'| - - `build_number` is the build number, which defaults to the value emitted by the `increment_build_number` action| - >| - For example, for build 1234 in the 'appstore' lane, it will tag the commit with `builds/appstore/1234`. - */ -func addGitTag(tag: String? = nil, - grouping: String = "builds", - prefix: String = "", - postfix: String = "", - buildNumber: Any, - message: String? = nil, - commit: String? = nil, - force: Bool = false, - sign: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "add_git_tag", className: nil, args: [RubyCommand.Argument(name: "tag", value: tag), - RubyCommand.Argument(name: "grouping", value: grouping), - RubyCommand.Argument(name: "prefix", value: prefix), - RubyCommand.Argument(name: "postfix", value: postfix), - RubyCommand.Argument(name: "build_number", value: buildNumber), - RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "commit", value: commit), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "sign", value: sign)]) - _ = runner.executeCommand(command) -} - -/** - Returns the current build_number of either live or edit version - - - parameters: - - initialBuildNumber: sets the build number to given value if no build is in current train - - appIdentifier: The bundle identifier of your app - - username: Your Apple ID Username - - teamId: The ID of your App Store Connect team if you're in multiple teams - - live: Query the live version (ready-for-sale) - - version: The version number whose latest build number we want - - platform: The platform to use (optional) - - teamName: The name of your App Store Connect team if you're in multiple teams - - Returns the current build number of either the live or testflight version - it is useful for getting the build_number of the current or ready-for-sale app version, and it also works on non-live testflight version. - If you need to handle more build-trains please see `latest_testflight_build_number`. - */ -func appStoreBuildNumber(initialBuildNumber: Any, - appIdentifier: String, - username: String, - teamId: Any? = nil, - live: Bool = true, - version: String? = nil, - platform: String = "ios", - teamName: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "app_store_build_number", className: nil, args: [RubyCommand.Argument(name: "initial_build_number", value: initialBuildNumber), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "live", value: live), - RubyCommand.Argument(name: "version", value: version), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "team_name", value: teamName)]) - _ = runner.executeCommand(command) -} - -/** - Upload your app to [Appaloosa Store](https://www.appaloosa-store.com/) - - - parameters: - - binary: Binary path. Optional for ipa if you use the `ipa` or `xcodebuild` action - - apiToken: Your API token - - storeId: Your Store id - - groupIds: Your app is limited to special users? Give us the group ids - - screenshots: Add some screenshots application to your store or hit [enter] - - locale: Select the folder locale for your screenshots - - device: Select the device format for your screenshots - - description: Your app description - - Appaloosa is a private mobile application store. This action offers a quick deployment on the platform. - You can create an account, push to your existing account, or manage your user groups. - We accept iOS and Android applications. - */ -func appaloosa(binary: String, - apiToken: String, - storeId: String, - groupIds: String = "", - screenshots: String, - locale: String = "en-US", - device: String? = nil, - description: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "appaloosa", className: nil, args: [RubyCommand.Argument(name: "binary", value: binary), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "store_id", value: storeId), - RubyCommand.Argument(name: "group_ids", value: groupIds), - RubyCommand.Argument(name: "screenshots", value: screenshots), - RubyCommand.Argument(name: "locale", value: locale), - RubyCommand.Argument(name: "device", value: device), - RubyCommand.Argument(name: "description", value: description)]) - _ = runner.executeCommand(command) -} - -/** - Upload your app to [Appetize.io](https://appetize.io/) to stream it in browser - - - parameters: - - apiHost: Appetize API host - - apiToken: Appetize.io API Token - - url: URL from which the ipa file can be fetched. Alternative to :path - - platform: Platform. Either `ios` or `android` - - path: Path to zipped build on the local filesystem. Either this or `url` must be specified - - publicKey: If not provided, a new app will be created. If provided, the existing build will be overwritten - - note: Notes you wish to add to the uploaded app - - If you provide a `public_key`, this will overwrite an existing application. If you want to have this build as a new app version, you shouldn't provide this value. - - To integrate appetize into your GitHub workflow check out the [device_grid guide](https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/device_grid/README.md). - */ -func appetize(apiHost: String = "api.appetize.io", - apiToken: String, - url: String? = nil, - platform: String = "ios", - path: String? = nil, - publicKey: String? = nil, - note: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "appetize", className: nil, args: [RubyCommand.Argument(name: "api_host", value: apiHost), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "url", value: url), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "public_key", value: publicKey), - RubyCommand.Argument(name: "note", value: note)]) - _ = runner.executeCommand(command) -} - -/** - Generate an URL for appetize simulator - - - parameters: - - publicKey: Public key of the app you wish to update - - baseUrl: Base URL of Appetize service - - device: Device type: iphone4s, iphone5s, iphone6, iphone6plus, ipadair, iphone6s, iphone6splus, ipadair2, nexus5, nexus7 or nexus9 - - scale: Scale of the simulator - - orientation: Device orientation - - language: Device language in ISO 639-1 language code, e.g. 'de' - - color: Color of the device - - launchUrl: Specify a deep link to open when your app is launched - - osVersion: The operating system version on which to run your app, e.g. 10.3, 8.0 - - params: Specify params value to be passed to Appetize - - proxy: Specify a HTTP proxy to be passed to Appetize - - - returns: The URL to preview the iPhone app - - Check out the [device_grid guide](https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/device_grid/README.md) for more information - */ -func appetizeViewingUrlGenerator(publicKey: String, - baseUrl: String = "https://appetize.io/embed", - device: String = "iphone5s", - scale: String? = nil, - orientation: String = "portrait", - language: String? = nil, - color: String = "black", - launchUrl: String? = nil, - osVersion: String? = nil, - params: String? = nil, - proxy: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "appetize_viewing_url_generator", className: nil, args: [RubyCommand.Argument(name: "public_key", value: publicKey), - RubyCommand.Argument(name: "base_url", value: baseUrl), - RubyCommand.Argument(name: "device", value: device), - RubyCommand.Argument(name: "scale", value: scale), - RubyCommand.Argument(name: "orientation", value: orientation), - RubyCommand.Argument(name: "language", value: language), - RubyCommand.Argument(name: "color", value: color), - RubyCommand.Argument(name: "launch_url", value: launchUrl), - RubyCommand.Argument(name: "os_version", value: osVersion), - RubyCommand.Argument(name: "params", value: params), - RubyCommand.Argument(name: "proxy", value: proxy)]) - _ = runner.executeCommand(command) -} - -/** - Run UI test by Appium with RSpec - - - parameters: - - platform: Appium platform name - - specPath: Path to Appium spec directory - - appPath: Path to Appium target app file - - invokeAppiumServer: Use local Appium server with invoke automatically - - host: Hostname of Appium server - - port: HTTP port of Appium server - - appiumPath: Path to Appium executable - - caps: Hash of caps for Appium::Driver - - appiumLib: Hash of appium_lib for Appium::Driver - */ -func appium(platform: String, - specPath: String, - appPath: String, - invokeAppiumServer: Bool = true, - host: String = "0.0.0.0", - port: Int = 4723, - appiumPath: String? = nil, - caps: [String: Any]? = nil, - appiumLib: [String: Any]? = nil) { - let command = RubyCommand(commandID: "", methodName: "appium", className: nil, args: [RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "spec_path", value: specPath), - RubyCommand.Argument(name: "app_path", value: appPath), - RubyCommand.Argument(name: "invoke_appium_server", value: invokeAppiumServer), - RubyCommand.Argument(name: "host", value: host), - RubyCommand.Argument(name: "port", value: port), - RubyCommand.Argument(name: "appium_path", value: appiumPath), - RubyCommand.Argument(name: "caps", value: caps), - RubyCommand.Argument(name: "appium_lib", value: appiumLib)]) - _ = runner.executeCommand(command) -} - -/** - Generate Apple-like source code documentation from the source code - - - parameters: - - input: Path(s) to source file directories or individual source files. Accepts a single path or an array of paths - - output: Output path - - templates: Template files path - - docsetInstallPath: DocSet installation path - - include: Include static doc(s) at path - - ignore: Ignore given path - - excludeOutput: Exclude given path from output - - indexDesc: File including main index description - - projectName: Project name - - projectVersion: Project version - - projectCompany: Project company - - companyId: Company UTI (i.e. reverse DNS name) - - createHtml: Create HTML - - createDocset: Create documentation set - - installDocset: Install documentation set to Xcode - - publishDocset: Prepare DocSet for publishing - - noCreateDocset: Create HTML and skip creating a DocSet - - htmlAnchors: The html anchor format to use in DocSet HTML - - cleanOutput: Remove contents of output path before starting - - docsetBundleId: DocSet bundle identifier - - docsetBundleName: DocSet bundle name - - docsetDesc: DocSet description - - docsetCopyright: DocSet copyright message - - docsetFeedName: DocSet feed name - - docsetFeedUrl: DocSet feed URL - - docsetFeedFormats: DocSet feed formats. Separated by a comma [atom,xml] - - docsetPackageUrl: DocSet package (.xar) URL - - docsetFallbackUrl: DocSet fallback URL - - docsetPublisherId: DocSet publisher identifier - - docsetPublisherName: DocSet publisher name - - docsetMinXcodeVersion: DocSet min. Xcode version - - docsetPlatformFamily: DocSet platform family - - docsetCertIssuer: DocSet certificate issuer - - docsetCertSigner: DocSet certificate signer - - docsetBundleFilename: DocSet bundle filename - - docsetAtomFilename: DocSet atom feed filename - - docsetXmlFilename: DocSet xml feed filename - - docsetPackageFilename: DocSet package (.xar,.tgz) filename - - options: Documentation generation options - - crossrefFormat: Cross reference template regex - - exitThreshold: Exit code threshold below which 0 is returned - - docsSectionTitle: Title of the documentation section (defaults to "Programming Guides" - - warnings: Documentation generation warnings - - logformat: Log format [0-3] - - verbose: Log verbosity level [0-6,xcode] - - Runs `appledoc [OPTIONS] ` for the project - */ -func appledoc(input: Any, - output: String? = nil, - templates: String? = nil, - docsetInstallPath: String? = nil, - include: String? = nil, - ignore: Any? = nil, - excludeOutput: Any? = nil, - indexDesc: String? = nil, - projectName: String, - projectVersion: String? = nil, - projectCompany: String, - companyId: String? = nil, - createHtml: Bool = false, - createDocset: Bool = false, - installDocset: Bool = false, - publishDocset: Bool = false, - noCreateDocset: Bool = false, - htmlAnchors: String? = nil, - cleanOutput: Bool = false, - docsetBundleId: String? = nil, - docsetBundleName: String? = nil, - docsetDesc: String? = nil, - docsetCopyright: String? = nil, - docsetFeedName: String? = nil, - docsetFeedUrl: String? = nil, - docsetFeedFormats: String? = nil, - docsetPackageUrl: String? = nil, - docsetFallbackUrl: String? = nil, - docsetPublisherId: String? = nil, - docsetPublisherName: String? = nil, - docsetMinXcodeVersion: String? = nil, - docsetPlatformFamily: String? = nil, - docsetCertIssuer: String? = nil, - docsetCertSigner: String? = nil, - docsetBundleFilename: String? = nil, - docsetAtomFilename: String? = nil, - docsetXmlFilename: String? = nil, - docsetPackageFilename: String? = nil, - options: String? = nil, - crossrefFormat: String? = nil, - exitThreshold: Int = 2, - docsSectionTitle: String? = nil, - warnings: String? = nil, - logformat: Any? = nil, - verbose: Any? = nil) { - let command = RubyCommand(commandID: "", methodName: "appledoc", className: nil, args: [RubyCommand.Argument(name: "input", value: input), - RubyCommand.Argument(name: "output", value: output), - RubyCommand.Argument(name: "templates", value: templates), - RubyCommand.Argument(name: "docset_install_path", value: docsetInstallPath), - RubyCommand.Argument(name: "include", value: include), - RubyCommand.Argument(name: "ignore", value: ignore), - RubyCommand.Argument(name: "exclude_output", value: excludeOutput), - RubyCommand.Argument(name: "index_desc", value: indexDesc), - RubyCommand.Argument(name: "project_name", value: projectName), - RubyCommand.Argument(name: "project_version", value: projectVersion), - RubyCommand.Argument(name: "project_company", value: projectCompany), - RubyCommand.Argument(name: "company_id", value: companyId), - RubyCommand.Argument(name: "create_html", value: createHtml), - RubyCommand.Argument(name: "create_docset", value: createDocset), - RubyCommand.Argument(name: "install_docset", value: installDocset), - RubyCommand.Argument(name: "publish_docset", value: publishDocset), - RubyCommand.Argument(name: "no_create_docset", value: noCreateDocset), - RubyCommand.Argument(name: "html_anchors", value: htmlAnchors), - RubyCommand.Argument(name: "clean_output", value: cleanOutput), - RubyCommand.Argument(name: "docset_bundle_id", value: docsetBundleId), - RubyCommand.Argument(name: "docset_bundle_name", value: docsetBundleName), - RubyCommand.Argument(name: "docset_desc", value: docsetDesc), - RubyCommand.Argument(name: "docset_copyright", value: docsetCopyright), - RubyCommand.Argument(name: "docset_feed_name", value: docsetFeedName), - RubyCommand.Argument(name: "docset_feed_url", value: docsetFeedUrl), - RubyCommand.Argument(name: "docset_feed_formats", value: docsetFeedFormats), - RubyCommand.Argument(name: "docset_package_url", value: docsetPackageUrl), - RubyCommand.Argument(name: "docset_fallback_url", value: docsetFallbackUrl), - RubyCommand.Argument(name: "docset_publisher_id", value: docsetPublisherId), - RubyCommand.Argument(name: "docset_publisher_name", value: docsetPublisherName), - RubyCommand.Argument(name: "docset_min_xcode_version", value: docsetMinXcodeVersion), - RubyCommand.Argument(name: "docset_platform_family", value: docsetPlatformFamily), - RubyCommand.Argument(name: "docset_cert_issuer", value: docsetCertIssuer), - RubyCommand.Argument(name: "docset_cert_signer", value: docsetCertSigner), - RubyCommand.Argument(name: "docset_bundle_filename", value: docsetBundleFilename), - RubyCommand.Argument(name: "docset_atom_filename", value: docsetAtomFilename), - RubyCommand.Argument(name: "docset_xml_filename", value: docsetXmlFilename), - RubyCommand.Argument(name: "docset_package_filename", value: docsetPackageFilename), - RubyCommand.Argument(name: "options", value: options), - RubyCommand.Argument(name: "crossref_format", value: crossrefFormat), - RubyCommand.Argument(name: "exit_threshold", value: exitThreshold), - RubyCommand.Argument(name: "docs_section_title", value: docsSectionTitle), - RubyCommand.Argument(name: "warnings", value: warnings), - RubyCommand.Argument(name: "logformat", value: logformat), - RubyCommand.Argument(name: "verbose", value: verbose)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `upload_to_app_store` action - - - parameters: - - username: Your Apple ID Username - - appIdentifier: The bundle identifier of your app - - appVersion: The version that should be edited or created - - ipa: Path to your ipa file - - pkg: Path to your pkg file - - buildNumber: If set the given build number (already uploaded to iTC) will be used instead of the current built one - - platform: The platform to use (optional) - - editLive: Modify live metadata, this option disables ipa upload and screenshot upload - - useLiveVersion: Force usage of live version rather than edit version - - metadataPath: Path to the folder containing the metadata files - - screenshotsPath: Path to the folder containing the screenshots - - skipBinaryUpload: Skip uploading an ipa or pkg to App Store Connect - - skipScreenshots: Don't upload the screenshots - - skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots - - skipAppVersionUpdate: Don't update app version for submission - - force: Skip the HTML report file verification - - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones - - submitForReview: Submit the new version for Review after uploading everything - - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible - - automaticRelease: Should the app be automatically released once it's approved? (Can not be used together with `auto_release_date`) - - autoReleaseDate: Date in milliseconds for automatically releasing on pending approval (Can not be used together with `automatic_release`) - - phasedRelease: Enable the phased release feature of iTC - - resetRatings: Reset the summary rating when you release a new version of the application - - priceTier: The price tier of this application - - appRatingConfigPath: Path to the app rating's config - - submissionInformation: Extra information for the submission (e.g. compliance specifications, IDFA settings) - - teamId: The ID of your App Store Connect team if you're in multiple teams - - teamName: The name of your App Store Connect team if you're in multiple teams - - devPortalTeamId: The short ID of your Developer Portal team, if you're in multiple teams. Different from your iTC team ID! - - devPortalTeamName: The name of your Developer Portal team if you're in multiple teams - - itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column - - runPrecheckBeforeSubmit: Run precheck before submitting to app review - - precheckDefaultRuleLevel: The default precheck rule level unless otherwise configured - - individualMetadataItems: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - An array of localized metadata items to upload individually by language so that errors can be identified. E.g. ['name', 'keywords', 'description']. Note: slow - - appIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the app icon - - appleWatchAppIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the Apple Watch app icon - - copyright: Metadata: The copyright notice - - primaryCategory: Metadata: The english name of the primary category (e.g. `Business`, `Books`) - - secondaryCategory: Metadata: The english name of the secondary category (e.g. `Business`, `Books`) - - primaryFirstSubCategory: Metadata: The english name of the primary first sub category (e.g. `Educational`, `Puzzle`) - - primarySecondSubCategory: Metadata: The english name of the primary second sub category (e.g. `Educational`, `Puzzle`) - - secondaryFirstSubCategory: Metadata: The english name of the secondary first sub category (e.g. `Educational`, `Puzzle`) - - secondarySecondSubCategory: Metadata: The english name of the secondary second sub category (e.g. `Educational`, `Puzzle`) - - tradeRepresentativeContactInformation: Metadata: A hash containing the trade representative contact information - - appReviewInformation: Metadata: A hash containing the review information - - appReviewAttachmentFile: Metadata: Path to the app review attachment file - - description: Metadata: The localised app description - - name: Metadata: The localised app name - - subtitle: Metadata: The localised app subtitle - - keywords: Metadata: An array of localised keywords - - promotionalText: Metadata: An array of localised promotional texts - - releaseNotes: Metadata: Localised release notes for this version - - privacyUrl: Metadata: Localised privacy url - - appleTvPrivacyPolicy: Metadata: Localised Apple TV privacy policy text - - supportUrl: Metadata: Localised support url - - marketingUrl: Metadata: Localised marketing url - - languages: Metadata: List of languages to activate - - ignoreLanguageDirectoryValidation: Ignore errors when invalid languages are found in metadata and screenshot directories - - precheckIncludeInAppPurchases: Should precheck check in-app purchases? - - app: The (spaceship) app ID of the app you want to use/modify - - Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration. - - If you don't want a PDF report for App Store builds, use the `:force` option. - This is useful when running _fastlane_ on your Continuous Integration server: - `_upload_to_app_store_(force: true)` - If your account is on multiple teams and you need to tell the `iTMSTransporter` which 'provider' to use, you can set the `:itc_provider` option to pass this info. - */ -func appstore(username: String, - appIdentifier: String? = nil, - appVersion: String? = nil, - ipa: String? = nil, - pkg: String? = nil, - buildNumber: String? = nil, - platform: String = "ios", - editLive: Bool = false, - useLiveVersion: Bool = false, - metadataPath: String? = nil, - screenshotsPath: String? = nil, - skipBinaryUpload: Bool = false, - skipScreenshots: Bool = false, - skipMetadata: Bool = false, - skipAppVersionUpdate: Bool = false, - force: Bool = false, - overwriteScreenshots: Bool = false, - submitForReview: Bool = false, - rejectIfPossible: Bool = false, - automaticRelease: Bool = false, - autoReleaseDate: Int? = nil, - phasedRelease: Bool = false, - resetRatings: Bool = false, - priceTier: Any? = nil, - appRatingConfigPath: String? = nil, - submissionInformation: [String: Any]? = nil, - teamId: Any? = nil, - teamName: String? = nil, - devPortalTeamId: String? = nil, - devPortalTeamName: String? = nil, - itcProvider: String? = nil, - runPrecheckBeforeSubmit: Bool = true, - precheckDefaultRuleLevel: Any = "warn", - individualMetadataItems: [String]? = nil, - appIcon: String? = nil, - appleWatchAppIcon: String? = nil, - copyright: String? = nil, - primaryCategory: String? = nil, - secondaryCategory: String? = nil, - primaryFirstSubCategory: String? = nil, - primarySecondSubCategory: String? = nil, - secondaryFirstSubCategory: String? = nil, - secondarySecondSubCategory: String? = nil, - tradeRepresentativeContactInformation: [String: Any]? = nil, - appReviewInformation: [String: Any]? = nil, - appReviewAttachmentFile: String? = nil, - description: Any? = nil, - name: Any? = nil, - subtitle: [String: Any]? = nil, - keywords: [String: Any]? = nil, - promotionalText: [String: Any]? = nil, - releaseNotes: Any? = nil, - privacyUrl: Any? = nil, - appleTvPrivacyPolicy: Any? = nil, - supportUrl: Any? = nil, - marketingUrl: Any? = nil, - languages: [String]? = nil, - ignoreLanguageDirectoryValidation: Bool = false, - precheckIncludeInAppPurchases: Bool = true, - app: Any) { - let command = RubyCommand(commandID: "", methodName: "appstore", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "app_version", value: appVersion), - RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "pkg", value: pkg), - RubyCommand.Argument(name: "build_number", value: buildNumber), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "edit_live", value: editLive), - RubyCommand.Argument(name: "use_live_version", value: useLiveVersion), - RubyCommand.Argument(name: "metadata_path", value: metadataPath), - RubyCommand.Argument(name: "screenshots_path", value: screenshotsPath), - RubyCommand.Argument(name: "skip_binary_upload", value: skipBinaryUpload), - RubyCommand.Argument(name: "skip_screenshots", value: skipScreenshots), - RubyCommand.Argument(name: "skip_metadata", value: skipMetadata), - RubyCommand.Argument(name: "skip_app_version_update", value: skipAppVersionUpdate), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "overwrite_screenshots", value: overwriteScreenshots), - RubyCommand.Argument(name: "submit_for_review", value: submitForReview), - RubyCommand.Argument(name: "reject_if_possible", value: rejectIfPossible), - RubyCommand.Argument(name: "automatic_release", value: automaticRelease), - RubyCommand.Argument(name: "auto_release_date", value: autoReleaseDate), - RubyCommand.Argument(name: "phased_release", value: phasedRelease), - RubyCommand.Argument(name: "reset_ratings", value: resetRatings), - RubyCommand.Argument(name: "price_tier", value: priceTier), - RubyCommand.Argument(name: "app_rating_config_path", value: appRatingConfigPath), - RubyCommand.Argument(name: "submission_information", value: submissionInformation), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId), - RubyCommand.Argument(name: "dev_portal_team_name", value: devPortalTeamName), - RubyCommand.Argument(name: "itc_provider", value: itcProvider), - RubyCommand.Argument(name: "run_precheck_before_submit", value: runPrecheckBeforeSubmit), - RubyCommand.Argument(name: "precheck_default_rule_level", value: precheckDefaultRuleLevel), - RubyCommand.Argument(name: "individual_metadata_items", value: individualMetadataItems), - RubyCommand.Argument(name: "app_icon", value: appIcon), - RubyCommand.Argument(name: "apple_watch_app_icon", value: appleWatchAppIcon), - RubyCommand.Argument(name: "copyright", value: copyright), - RubyCommand.Argument(name: "primary_category", value: primaryCategory), - RubyCommand.Argument(name: "secondary_category", value: secondaryCategory), - RubyCommand.Argument(name: "primary_first_sub_category", value: primaryFirstSubCategory), - RubyCommand.Argument(name: "primary_second_sub_category", value: primarySecondSubCategory), - RubyCommand.Argument(name: "secondary_first_sub_category", value: secondaryFirstSubCategory), - RubyCommand.Argument(name: "secondary_second_sub_category", value: secondarySecondSubCategory), - RubyCommand.Argument(name: "trade_representative_contact_information", value: tradeRepresentativeContactInformation), - RubyCommand.Argument(name: "app_review_information", value: appReviewInformation), - RubyCommand.Argument(name: "app_review_attachment_file", value: appReviewAttachmentFile), - RubyCommand.Argument(name: "description", value: description), - RubyCommand.Argument(name: "name", value: name), - RubyCommand.Argument(name: "subtitle", value: subtitle), - RubyCommand.Argument(name: "keywords", value: keywords), - RubyCommand.Argument(name: "promotional_text", value: promotionalText), - RubyCommand.Argument(name: "release_notes", value: releaseNotes), - RubyCommand.Argument(name: "privacy_url", value: privacyUrl), - RubyCommand.Argument(name: "apple_tv_privacy_policy", value: appleTvPrivacyPolicy), - RubyCommand.Argument(name: "support_url", value: supportUrl), - RubyCommand.Argument(name: "marketing_url", value: marketingUrl), - RubyCommand.Argument(name: "languages", value: languages), - RubyCommand.Argument(name: "ignore_language_directory_validation", value: ignoreLanguageDirectoryValidation), - RubyCommand.Argument(name: "precheck_include_in_app_purchases", value: precheckIncludeInAppPurchases), - RubyCommand.Argument(name: "app", value: app)]) - _ = runner.executeCommand(command) -} - -/** - Upload dSYM file to [Apteligent (Crittercism)](http://www.apteligent.com/) - - - parameters: - - dsym: dSYM.zip file to upload to Apteligent - - appId: Apteligent App ID key e.g. 569f5c87cb99e10e00c7xxxx - - apiKey: Apteligent App API key e.g. IXPQIi8yCbHaLliqzRoo065tH0lxxxxx - */ -func apteligent(dsym: String? = nil, - appId: String, - apiKey: String) { - let command = RubyCommand(commandID: "", methodName: "apteligent", className: nil, args: [RubyCommand.Argument(name: "dsym", value: dsym), - RubyCommand.Argument(name: "app_id", value: appId), - RubyCommand.Argument(name: "api_key", value: apiKey)]) - _ = runner.executeCommand(command) -} - -/** - This action uploads an artifact to artifactory - - - parameters: - - file: File to be uploaded to artifactory - - repo: Artifactory repo to put the file in - - repoPath: Path to deploy within the repo, including filename - - endpoint: Artifactory endpoint - - username: Artifactory username - - password: Artifactory password - - properties: Artifact properties hash - - sslPemFile: Location of pem file to use for ssl verification - - sslVerify: Verify SSL - - proxyUsername: Proxy username - - proxyPassword: Proxy password - - proxyAddress: Proxy address - - proxyPort: Proxy port - - readTimeout: Read timeout - */ -func artifactory(file: String, - repo: String, - repoPath: String, - endpoint: String, - username: String, - password: String, - properties: [String: Any] = [:], - sslPemFile: String? = nil, - sslVerify: Bool = true, - proxyUsername: String? = nil, - proxyPassword: String? = nil, - proxyAddress: String? = nil, - proxyPort: String? = nil, - readTimeout: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "artifactory", className: nil, args: [RubyCommand.Argument(name: "file", value: file), - RubyCommand.Argument(name: "repo", value: repo), - RubyCommand.Argument(name: "repo_path", value: repoPath), - RubyCommand.Argument(name: "endpoint", value: endpoint), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "password", value: password), - RubyCommand.Argument(name: "properties", value: properties), - RubyCommand.Argument(name: "ssl_pem_file", value: sslPemFile), - RubyCommand.Argument(name: "ssl_verify", value: sslVerify), - RubyCommand.Argument(name: "proxy_username", value: proxyUsername), - RubyCommand.Argument(name: "proxy_password", value: proxyPassword), - RubyCommand.Argument(name: "proxy_address", value: proxyAddress), - RubyCommand.Argument(name: "proxy_port", value: proxyPort), - RubyCommand.Argument(name: "read_timeout", value: readTimeout)]) - _ = runner.executeCommand(command) -} - -/** - Configures Xcode's Codesigning options - - - parameters: - - path: Path to your Xcode project - - useAutomaticSigning: Defines if project should use automatic signing - - teamId: Team ID, is used when upgrading project - - targets: Specify targets you want to toggle the signing mech. (default to all targets) - - codeSignIdentity: Code signing identity type (iPhone Developer, iPhone Distribution) - - profileName: Provisioning profile name to use for code signing - - profileUuid: Provisioning profile UUID to use for code signing - - bundleIdentifier: Application Product Bundle Identifier - - - returns: The current status (boolean) of codesigning after modification - - Configures Xcode's Codesigning options of all targets in the project - */ -func automaticCodeSigning(path: String, - useAutomaticSigning: Bool = false, - teamId: String? = nil, - targets: [String]? = nil, - codeSignIdentity: String? = nil, - profileName: String? = nil, - profileUuid: String? = nil, - bundleIdentifier: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "automatic_code_signing", className: nil, args: [RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "use_automatic_signing", value: useAutomaticSigning), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "targets", value: targets), - RubyCommand.Argument(name: "code_sign_identity", value: codeSignIdentity), - RubyCommand.Argument(name: "profile_name", value: profileName), - RubyCommand.Argument(name: "profile_uuid", value: profileUuid), - RubyCommand.Argument(name: "bundle_identifier", value: bundleIdentifier)]) - _ = runner.executeCommand(command) -} - -/** - This action backs up your file to "[path].back" - - - parameter path: Path to the file you want to backup - */ -func backupFile(path: String) { - let command = RubyCommand(commandID: "", methodName: "backup_file", className: nil, args: [RubyCommand.Argument(name: "path", value: path)]) - _ = runner.executeCommand(command) -} - -/** - Save your [zipped] xcarchive elsewhere from default path - - - parameters: - - xcarchive: Path to your xcarchive file. Optional if you use the `xcodebuild` action - - destination: Where your archive will be placed - - zip: Enable compression of the archive - - zipFilename: Filename of the compressed archive. Will be appended by `.xcarchive.zip`. Default value is the output xcarchive filename - - versioned: Create a versioned (date and app version) subfolder where to put the archive - */ -func backupXcarchive(xcarchive: String, - destination: String, - zip: Bool = true, - zipFilename: String? = nil, - versioned: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "backup_xcarchive", className: nil, args: [RubyCommand.Argument(name: "xcarchive", value: xcarchive), - RubyCommand.Argument(name: "destination", value: destination), - RubyCommand.Argument(name: "zip", value: zip), - RubyCommand.Argument(name: "zip_filename", value: zipFilename), - RubyCommand.Argument(name: "versioned", value: versioned)]) - _ = runner.executeCommand(command) -} - -/** - Automatically add a badge to your app icon - - - parameters: - - dark: Adds a dark flavored badge ontop of your icon - - custom: Add your custom overlay/badge image - - noBadge: Hides the beta badge - - shield: Add a shield to your app icon from shields.io - - alpha: Adds and alpha badge instead of the default beta one - - path: Sets the root path to look for AppIcons - - shieldIoTimeout: Set custom duration for the timeout of the shields.io request in seconds - - glob: Glob pattern for finding image files - - alphaChannel: Keeps/adds an alpha channel to the icon (useful for android icons) - - shieldGravity: Position of shield on icon. Default: North - Choices include: NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast - - shieldNoResize: Shield image will no longer be resized to aspect fill the full icon. Instead it will only be shrunk to not exceed the icon graphic - - Please use the [badge plugin](https://github.com/HazAT/fastlane-plugin-badge) instead. - This action will add a light/dark badge onto your app icon. - You can also provide your custom badge/overlay or add a shield for more customization. - More info: [https://github.com/HazAT/badge](https://github.com/HazAT/badge) - **Note**: If you want to reset the badge back to default, you can use `sh 'git checkout -- /Assets.xcassets/'`. - */ -func badge(dark: Any? = nil, - custom: String? = nil, - noBadge: Any? = nil, - shield: String? = nil, - alpha: Any? = nil, - path: String = ".", - shieldIoTimeout: Any? = nil, - glob: String? = nil, - alphaChannel: Any? = nil, - shieldGravity: String? = nil, - shieldNoResize: Any? = nil) { - let command = RubyCommand(commandID: "", methodName: "badge", className: nil, args: [RubyCommand.Argument(name: "dark", value: dark), - RubyCommand.Argument(name: "custom", value: custom), - RubyCommand.Argument(name: "no_badge", value: noBadge), - RubyCommand.Argument(name: "shield", value: shield), - RubyCommand.Argument(name: "alpha", value: alpha), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "shield_io_timeout", value: shieldIoTimeout), - RubyCommand.Argument(name: "glob", value: glob), - RubyCommand.Argument(name: "alpha_channel", value: alphaChannel), - RubyCommand.Argument(name: "shield_gravity", value: shieldGravity), - RubyCommand.Argument(name: "shield_no_resize", value: shieldNoResize)]) - _ = runner.executeCommand(command) -} - -/** - Generate and upload an ipa file to appetize.io - - - parameters: - - xcodebuild: Parameters that are passed to the xcodebuild action - - scheme: The scheme to build. Can also be passed using the `xcodebuild` parameter - - apiToken: Appetize.io API Token - - publicKey: If not provided, a new app will be created. If provided, the existing build will be overwritten - - note: Notes you wish to add to the uploaded app - - This should be called from danger. - More information in the [device_grid guide](https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/device_grid/README.md). - */ -func buildAndUploadToAppetize(xcodebuild: [String: Any] = [:], - scheme: String? = nil, - apiToken: String, - publicKey: String? = nil, - note: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "build_and_upload_to_appetize", className: nil, args: [RubyCommand.Argument(name: "xcodebuild", value: xcodebuild), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "public_key", value: publicKey), - RubyCommand.Argument(name: "note", value: note)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `gradle` action - - - parameters: - - task: The gradle task you want to execute, e.g. `assemble`, `bundle` or `test`. For tasks such as `assembleMyFlavorRelease` you should use gradle(task: 'assemble', flavor: 'Myflavor', build_type: 'Release') - - flavor: The flavor that you want the task for, e.g. `MyFlavor`. If you are running the `assemble` task in a multi-flavor project, and you rely on Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] then you must specify a flavor here or else this value will be undefined - - buildType: The build type that you want the task for, e.g. `Release`. Useful for some tasks such as `assemble` - - tasks: The multiple gradle tasks that you want to execute, e.g. `[assembleDebug, bundleDebug]` - - flags: All parameter flags you want to pass to the gradle command, e.g. `--exitcode --xml file.xml` - - projectDir: The root directory of the gradle project - - gradlePath: The path to your `gradlew`. If you specify a relative path, it is assumed to be relative to the `project_dir` - - properties: Gradle properties to be exposed to the gradle script - - systemProperties: Gradle system properties to be exposed to the gradle script - - serial: Android serial, which device should be used for this command - - printCommand: Control whether the generated Gradle command is printed as output before running it (true/false) - - printCommandOutput: Control whether the output produced by given Gradle command is printed while running (true/false) - - - returns: The output of running the gradle task - - Run `./gradlew tasks` to get a list of all available gradle tasks for your project - */ -func buildAndroidApp(task: String? = nil, - flavor: String? = nil, - buildType: String? = nil, - tasks: [String]? = nil, - flags: String? = nil, - projectDir: String = ".", - gradlePath: String? = nil, - properties: Any? = nil, - systemProperties: Any? = nil, - serial: String = "", - printCommand: Bool = true, - printCommandOutput: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "build_android_app", className: nil, args: [RubyCommand.Argument(name: "task", value: task), - RubyCommand.Argument(name: "flavor", value: flavor), - RubyCommand.Argument(name: "build_type", value: buildType), - RubyCommand.Argument(name: "tasks", value: tasks), - RubyCommand.Argument(name: "flags", value: flags), - RubyCommand.Argument(name: "project_dir", value: projectDir), - RubyCommand.Argument(name: "gradle_path", value: gradlePath), - RubyCommand.Argument(name: "properties", value: properties), - RubyCommand.Argument(name: "system_properties", value: systemProperties), - RubyCommand.Argument(name: "serial", value: serial), - RubyCommand.Argument(name: "print_command", value: printCommand), - RubyCommand.Argument(name: "print_command_output", value: printCommandOutput)]) - _ = runner.executeCommand(command) -} - -/** - Easily build and sign your app (via _gym_) - - - parameters: - - workspace: Path to the workspace file - - project: Path to the project file - - scheme: The project's scheme. Make sure it's marked as `Shared` - - clean: Should the project be cleaned before building it? - - outputDirectory: The directory in which the ipa file should be stored in - - outputName: The name of the resulting ipa file - - configuration: The configuration to use when building the app. Defaults to 'Release' - - silent: Hide all information that's not necessary while building - - codesigningIdentity: The name of the code signing identity to use. It has to match the name exactly. e.g. 'iPhone Distribution: SunApps GmbH' - - skipPackageIpa: Should we skip packaging the ipa? - - skipPackagePkg: Should we skip packaging the pkg? - - includeSymbols: Should the ipa file include symbols? - - includeBitcode: Should the ipa file include bitcode? - - exportMethod: Method used to export the archive. Valid values are: app-store, ad-hoc, package, enterprise, development, developer-id - - exportOptions: Path to an export options plist or a hash with export options. Use 'xcodebuild -help' to print the full set of available options - - exportXcargs: Pass additional arguments to xcodebuild for the package phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - skipBuildArchive: Export ipa from previously built xcarchive. Uses archive_path as source - - skipArchive: After building, don't archive, effectively not including -archivePath param - - skipCodesigning: Build without codesigning - - catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos - - installerCertName: Full name of 3rd Party Mac Developer Installer or Developer ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)` - - buildPath: The directory in which the archive should be stored in - - archivePath: The path to the created archive - - derivedDataPath: The directory where built products and other derived data will go - - resultBundle: Should an Xcode result bundle be generated in the output directory - - resultBundlePath: Path to the result bundle directory to create. Ignored if `result_bundle` if false - - buildlogPath: The directory where to store the build log - - sdk: The SDK that should be used for building the application - - toolchain: The toolchain that should be used for building the application (e.g. com.apple.dt.toolchain.Swift_2_3, org.swift.30p620160816a) - - destination: Use a custom destination for building the app - - exportTeamId: Optional: Sometimes you need to specify a team id when exporting the ipa file - - xcargs: Pass additional arguments to xcodebuild for the build phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - xcconfig: Use an extra XCCONFIG file to build your app - - suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path - - disableXcpretty: Disable xcpretty formatting of build output - - xcprettyTestFormat: Use the test (RSpec style) format for build output - - xcprettyFormatter: A custom xcpretty formatter to use - - xcprettyReportJunit: Have xcpretty create a JUnit-style XML report at the provided path - - xcprettyReportHtml: Have xcpretty create a simple HTML report at the provided path - - xcprettyReportJson: Have xcpretty create a JSON compilation database at the provided path - - analyzeBuildTime: Analyze the project build time and store the output in 'culprits.txt' file - - xcprettyUtf: Have xcpretty use unicode encoding when reporting builds - - skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used - - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies - - - returns: The absolute path to the generated ipa file - - More information: https://fastlane.tools/gym - */ -func buildApp(workspace: String? = nil, - project: String? = nil, - scheme: String? = nil, - clean: Bool = false, - outputDirectory: String = ".", - outputName: String? = nil, - configuration: String? = nil, - silent: Bool = false, - codesigningIdentity: String? = nil, - skipPackageIpa: Bool = false, - skipPackagePkg: Bool = false, - includeSymbols: Bool? = nil, - includeBitcode: Bool? = nil, - exportMethod: String? = nil, - exportOptions: [String: Any]? = nil, - exportXcargs: String? = nil, - skipBuildArchive: Bool? = nil, - skipArchive: Bool? = nil, - skipCodesigning: Bool? = nil, - catalystPlatform: String? = nil, - installerCertName: String? = nil, - buildPath: String? = nil, - archivePath: String? = nil, - derivedDataPath: String? = nil, - resultBundle: Bool = false, - resultBundlePath: String? = nil, - buildlogPath: String = "~/Library/Logs/gym", - sdk: String? = nil, - toolchain: String? = nil, - destination: String? = nil, - exportTeamId: String? = nil, - xcargs: String? = nil, - xcconfig: String? = nil, - suppressXcodeOutput: Bool? = nil, - disableXcpretty: Bool? = nil, - xcprettyTestFormat: Bool? = nil, - xcprettyFormatter: String? = nil, - xcprettyReportJunit: String? = nil, - xcprettyReportHtml: String? = nil, - xcprettyReportJson: String? = nil, - analyzeBuildTime: Bool? = nil, - xcprettyUtf: Bool? = nil, - skipProfileDetection: Bool = false, - clonedSourcePackagesPath: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "build_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "project", value: project), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "output_name", value: outputName), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "silent", value: silent), - RubyCommand.Argument(name: "codesigning_identity", value: codesigningIdentity), - RubyCommand.Argument(name: "skip_package_ipa", value: skipPackageIpa), - RubyCommand.Argument(name: "skip_package_pkg", value: skipPackagePkg), - RubyCommand.Argument(name: "include_symbols", value: includeSymbols), - RubyCommand.Argument(name: "include_bitcode", value: includeBitcode), - RubyCommand.Argument(name: "export_method", value: exportMethod), - RubyCommand.Argument(name: "export_options", value: exportOptions), - RubyCommand.Argument(name: "export_xcargs", value: exportXcargs), - RubyCommand.Argument(name: "skip_build_archive", value: skipBuildArchive), - RubyCommand.Argument(name: "skip_archive", value: skipArchive), - RubyCommand.Argument(name: "skip_codesigning", value: skipCodesigning), - RubyCommand.Argument(name: "catalyst_platform", value: catalystPlatform), - RubyCommand.Argument(name: "installer_cert_name", value: installerCertName), - RubyCommand.Argument(name: "build_path", value: buildPath), - RubyCommand.Argument(name: "archive_path", value: archivePath), - RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath), - RubyCommand.Argument(name: "result_bundle", value: resultBundle), - RubyCommand.Argument(name: "result_bundle_path", value: resultBundlePath), - RubyCommand.Argument(name: "buildlog_path", value: buildlogPath), - RubyCommand.Argument(name: "sdk", value: sdk), - RubyCommand.Argument(name: "toolchain", value: toolchain), - RubyCommand.Argument(name: "destination", value: destination), - RubyCommand.Argument(name: "export_team_id", value: exportTeamId), - RubyCommand.Argument(name: "xcargs", value: xcargs), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput), - RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty), - RubyCommand.Argument(name: "xcpretty_test_format", value: xcprettyTestFormat), - RubyCommand.Argument(name: "xcpretty_formatter", value: xcprettyFormatter), - RubyCommand.Argument(name: "xcpretty_report_junit", value: xcprettyReportJunit), - RubyCommand.Argument(name: "xcpretty_report_html", value: xcprettyReportHtml), - RubyCommand.Argument(name: "xcpretty_report_json", value: xcprettyReportJson), - RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime), - RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf), - RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection), - RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `build_app` action but only for iOS - - - parameters: - - workspace: Path to the workspace file - - project: Path to the project file - - scheme: The project's scheme. Make sure it's marked as `Shared` - - clean: Should the project be cleaned before building it? - - outputDirectory: The directory in which the ipa file should be stored in - - outputName: The name of the resulting ipa file - - configuration: The configuration to use when building the app. Defaults to 'Release' - - silent: Hide all information that's not necessary while building - - codesigningIdentity: The name of the code signing identity to use. It has to match the name exactly. e.g. 'iPhone Distribution: SunApps GmbH' - - skipPackageIpa: Should we skip packaging the ipa? - - includeSymbols: Should the ipa file include symbols? - - includeBitcode: Should the ipa file include bitcode? - - exportMethod: Method used to export the archive. Valid values are: app-store, ad-hoc, package, enterprise, development, developer-id - - exportOptions: Path to an export options plist or a hash with export options. Use 'xcodebuild -help' to print the full set of available options - - exportXcargs: Pass additional arguments to xcodebuild for the package phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - skipBuildArchive: Export ipa from previously built xcarchive. Uses archive_path as source - - skipArchive: After building, don't archive, effectively not including -archivePath param - - skipCodesigning: Build without codesigning - - buildPath: The directory in which the archive should be stored in - - archivePath: The path to the created archive - - derivedDataPath: The directory where built products and other derived data will go - - resultBundle: Should an Xcode result bundle be generated in the output directory - - resultBundlePath: Path to the result bundle directory to create. Ignored if `result_bundle` if false - - buildlogPath: The directory where to store the build log - - sdk: The SDK that should be used for building the application - - toolchain: The toolchain that should be used for building the application (e.g. com.apple.dt.toolchain.Swift_2_3, org.swift.30p620160816a) - - destination: Use a custom destination for building the app - - exportTeamId: Optional: Sometimes you need to specify a team id when exporting the ipa file - - xcargs: Pass additional arguments to xcodebuild for the build phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - xcconfig: Use an extra XCCONFIG file to build your app - - suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path - - disableXcpretty: Disable xcpretty formatting of build output - - xcprettyTestFormat: Use the test (RSpec style) format for build output - - xcprettyFormatter: A custom xcpretty formatter to use - - xcprettyReportJunit: Have xcpretty create a JUnit-style XML report at the provided path - - xcprettyReportHtml: Have xcpretty create a simple HTML report at the provided path - - xcprettyReportJson: Have xcpretty create a JSON compilation database at the provided path - - analyzeBuildTime: Analyze the project build time and store the output in 'culprits.txt' file - - xcprettyUtf: Have xcpretty use unicode encoding when reporting builds - - skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used - - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies - - - returns: The absolute path to the generated ipa file - - More information: https://fastlane.tools/gym - */ -func buildIosApp(workspace: String? = nil, - project: String? = nil, - scheme: String? = nil, - clean: Bool = false, - outputDirectory: String = ".", - outputName: String? = nil, - configuration: String? = nil, - silent: Bool = false, - codesigningIdentity: String? = nil, - skipPackageIpa: Bool = false, - includeSymbols: Bool? = nil, - includeBitcode: Bool? = nil, - exportMethod: String? = nil, - exportOptions: [String: Any]? = nil, - exportXcargs: String? = nil, - skipBuildArchive: Bool? = nil, - skipArchive: Bool? = nil, - skipCodesigning: Bool? = nil, - buildPath: String? = nil, - archivePath: String? = nil, - derivedDataPath: String? = nil, - resultBundle: Bool = false, - resultBundlePath: String? = nil, - buildlogPath: String = "~/Library/Logs/gym", - sdk: String? = nil, - toolchain: String? = nil, - destination: String? = nil, - exportTeamId: String? = nil, - xcargs: String? = nil, - xcconfig: String? = nil, - suppressXcodeOutput: Bool? = nil, - disableXcpretty: Bool? = nil, - xcprettyTestFormat: Bool? = nil, - xcprettyFormatter: String? = nil, - xcprettyReportJunit: String? = nil, - xcprettyReportHtml: String? = nil, - xcprettyReportJson: String? = nil, - analyzeBuildTime: Bool? = nil, - xcprettyUtf: Bool? = nil, - skipProfileDetection: Bool = false, - clonedSourcePackagesPath: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "build_ios_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "project", value: project), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "output_name", value: outputName), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "silent", value: silent), - RubyCommand.Argument(name: "codesigning_identity", value: codesigningIdentity), - RubyCommand.Argument(name: "skip_package_ipa", value: skipPackageIpa), - RubyCommand.Argument(name: "include_symbols", value: includeSymbols), - RubyCommand.Argument(name: "include_bitcode", value: includeBitcode), - RubyCommand.Argument(name: "export_method", value: exportMethod), - RubyCommand.Argument(name: "export_options", value: exportOptions), - RubyCommand.Argument(name: "export_xcargs", value: exportXcargs), - RubyCommand.Argument(name: "skip_build_archive", value: skipBuildArchive), - RubyCommand.Argument(name: "skip_archive", value: skipArchive), - RubyCommand.Argument(name: "skip_codesigning", value: skipCodesigning), - RubyCommand.Argument(name: "build_path", value: buildPath), - RubyCommand.Argument(name: "archive_path", value: archivePath), - RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath), - RubyCommand.Argument(name: "result_bundle", value: resultBundle), - RubyCommand.Argument(name: "result_bundle_path", value: resultBundlePath), - RubyCommand.Argument(name: "buildlog_path", value: buildlogPath), - RubyCommand.Argument(name: "sdk", value: sdk), - RubyCommand.Argument(name: "toolchain", value: toolchain), - RubyCommand.Argument(name: "destination", value: destination), - RubyCommand.Argument(name: "export_team_id", value: exportTeamId), - RubyCommand.Argument(name: "xcargs", value: xcargs), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput), - RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty), - RubyCommand.Argument(name: "xcpretty_test_format", value: xcprettyTestFormat), - RubyCommand.Argument(name: "xcpretty_formatter", value: xcprettyFormatter), - RubyCommand.Argument(name: "xcpretty_report_junit", value: xcprettyReportJunit), - RubyCommand.Argument(name: "xcpretty_report_html", value: xcprettyReportHtml), - RubyCommand.Argument(name: "xcpretty_report_json", value: xcprettyReportJson), - RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime), - RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf), - RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection), - RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `build_app` action but only for macOS - - - parameters: - - workspace: Path to the workspace file - - project: Path to the project file - - scheme: The project's scheme. Make sure it's marked as `Shared` - - clean: Should the project be cleaned before building it? - - outputDirectory: The directory in which the ipa file should be stored in - - outputName: The name of the resulting ipa file - - configuration: The configuration to use when building the app. Defaults to 'Release' - - silent: Hide all information that's not necessary while building - - codesigningIdentity: The name of the code signing identity to use. It has to match the name exactly. e.g. 'iPhone Distribution: SunApps GmbH' - - skipPackagePkg: Should we skip packaging the pkg? - - includeSymbols: Should the ipa file include symbols? - - includeBitcode: Should the ipa file include bitcode? - - exportMethod: Method used to export the archive. Valid values are: app-store, ad-hoc, package, enterprise, development, developer-id - - exportOptions: Path to an export options plist or a hash with export options. Use 'xcodebuild -help' to print the full set of available options - - exportXcargs: Pass additional arguments to xcodebuild for the package phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - skipBuildArchive: Export ipa from previously built xcarchive. Uses archive_path as source - - skipArchive: After building, don't archive, effectively not including -archivePath param - - skipCodesigning: Build without codesigning - - installerCertName: Full name of 3rd Party Mac Developer Installer or Developer ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)` - - buildPath: The directory in which the archive should be stored in - - archivePath: The path to the created archive - - derivedDataPath: The directory where built products and other derived data will go - - resultBundle: Should an Xcode result bundle be generated in the output directory - - resultBundlePath: Path to the result bundle directory to create. Ignored if `result_bundle` if false - - buildlogPath: The directory where to store the build log - - sdk: The SDK that should be used for building the application - - toolchain: The toolchain that should be used for building the application (e.g. com.apple.dt.toolchain.Swift_2_3, org.swift.30p620160816a) - - destination: Use a custom destination for building the app - - exportTeamId: Optional: Sometimes you need to specify a team id when exporting the ipa file - - xcargs: Pass additional arguments to xcodebuild for the build phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - xcconfig: Use an extra XCCONFIG file to build your app - - suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path - - disableXcpretty: Disable xcpretty formatting of build output - - xcprettyTestFormat: Use the test (RSpec style) format for build output - - xcprettyFormatter: A custom xcpretty formatter to use - - xcprettyReportJunit: Have xcpretty create a JUnit-style XML report at the provided path - - xcprettyReportHtml: Have xcpretty create a simple HTML report at the provided path - - xcprettyReportJson: Have xcpretty create a JSON compilation database at the provided path - - analyzeBuildTime: Analyze the project build time and store the output in 'culprits.txt' file - - xcprettyUtf: Have xcpretty use unicode encoding when reporting builds - - skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used - - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies - - - returns: The absolute path to the generated ipa file - - More information: https://fastlane.tools/gym - */ -func buildMacApp(workspace: String? = nil, - project: String? = nil, - scheme: String? = nil, - clean: Bool = false, - outputDirectory: String = ".", - outputName: String? = nil, - configuration: String? = nil, - silent: Bool = false, - codesigningIdentity: String? = nil, - skipPackagePkg: Bool = false, - includeSymbols: Bool? = nil, - includeBitcode: Bool? = nil, - exportMethod: String? = nil, - exportOptions: [String: Any]? = nil, - exportXcargs: String? = nil, - skipBuildArchive: Bool? = nil, - skipArchive: Bool? = nil, - skipCodesigning: Bool? = nil, - installerCertName: String? = nil, - buildPath: String? = nil, - archivePath: String? = nil, - derivedDataPath: String? = nil, - resultBundle: Bool = false, - resultBundlePath: String? = nil, - buildlogPath: String = "~/Library/Logs/gym", - sdk: String? = nil, - toolchain: String? = nil, - destination: String? = nil, - exportTeamId: String? = nil, - xcargs: String? = nil, - xcconfig: String? = nil, - suppressXcodeOutput: Bool? = nil, - disableXcpretty: Bool? = nil, - xcprettyTestFormat: Bool? = nil, - xcprettyFormatter: String? = nil, - xcprettyReportJunit: String? = nil, - xcprettyReportHtml: String? = nil, - xcprettyReportJson: String? = nil, - analyzeBuildTime: Bool? = nil, - xcprettyUtf: Bool? = nil, - skipProfileDetection: Bool = false, - clonedSourcePackagesPath: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "build_mac_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "project", value: project), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "output_name", value: outputName), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "silent", value: silent), - RubyCommand.Argument(name: "codesigning_identity", value: codesigningIdentity), - RubyCommand.Argument(name: "skip_package_pkg", value: skipPackagePkg), - RubyCommand.Argument(name: "include_symbols", value: includeSymbols), - RubyCommand.Argument(name: "include_bitcode", value: includeBitcode), - RubyCommand.Argument(name: "export_method", value: exportMethod), - RubyCommand.Argument(name: "export_options", value: exportOptions), - RubyCommand.Argument(name: "export_xcargs", value: exportXcargs), - RubyCommand.Argument(name: "skip_build_archive", value: skipBuildArchive), - RubyCommand.Argument(name: "skip_archive", value: skipArchive), - RubyCommand.Argument(name: "skip_codesigning", value: skipCodesigning), - RubyCommand.Argument(name: "installer_cert_name", value: installerCertName), - RubyCommand.Argument(name: "build_path", value: buildPath), - RubyCommand.Argument(name: "archive_path", value: archivePath), - RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath), - RubyCommand.Argument(name: "result_bundle", value: resultBundle), - RubyCommand.Argument(name: "result_bundle_path", value: resultBundlePath), - RubyCommand.Argument(name: "buildlog_path", value: buildlogPath), - RubyCommand.Argument(name: "sdk", value: sdk), - RubyCommand.Argument(name: "toolchain", value: toolchain), - RubyCommand.Argument(name: "destination", value: destination), - RubyCommand.Argument(name: "export_team_id", value: exportTeamId), - RubyCommand.Argument(name: "xcargs", value: xcargs), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput), - RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty), - RubyCommand.Argument(name: "xcpretty_test_format", value: xcprettyTestFormat), - RubyCommand.Argument(name: "xcpretty_formatter", value: xcprettyFormatter), - RubyCommand.Argument(name: "xcpretty_report_junit", value: xcprettyReportJunit), - RubyCommand.Argument(name: "xcpretty_report_html", value: xcprettyReportHtml), - RubyCommand.Argument(name: "xcpretty_report_json", value: xcprettyReportJson), - RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime), - RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf), - RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection), - RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)]) - _ = runner.executeCommand(command) -} - -/** - This action runs `bundle install` (if available) - - - parameters: - - binstubs: Generate bin stubs for bundled gems to ./bin - - clean: Run bundle clean automatically after install - - fullIndex: Use the rubygems modern index instead of the API endpoint - - gemfile: Use the specified gemfile instead of Gemfile - - jobs: Install gems using parallel workers - - local: Do not attempt to fetch gems remotely and use the gem cache instead - - deployment: Install using defaults tuned for deployment and CI environments - - noCache: Don't update the existing gem cache - - noPrune: Don't remove stale gems from the cache - - path: Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME). Bundler will remember this value for future installs on this machine - - system: Install to the system location ($BUNDLE_PATH or $GEM_HOME) even if the bundle was previously installed somewhere else for this application - - quiet: Only output warnings and errors - - retry: Retry network and git requests that have failed - - shebang: Specify a different shebang executable name than the default (usually 'ruby') - - standalone: Make a bundle that can work without the Bundler runtime - - trustPolicy: Sets level of security when dealing with signed gems. Accepts `LowSecurity`, `MediumSecurity` and `HighSecurity` as values - - without: Exclude gems that are part of the specified named group - - with: Include gems that are part of the specified named group - */ -func bundleInstall(binstubs: String? = nil, - clean: Bool = false, - fullIndex: Bool = false, - gemfile: String? = nil, - jobs: Bool? = nil, - local: Bool = false, - deployment: Bool = false, - noCache: Bool = false, - noPrune: Bool = false, - path: String? = nil, - system: Bool = false, - quiet: Bool = false, - retry: Bool? = nil, - shebang: String? = nil, - standalone: String? = nil, - trustPolicy: String? = nil, - without: String? = nil, - with: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "bundle_install", className: nil, args: [RubyCommand.Argument(name: "binstubs", value: binstubs), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "full_index", value: fullIndex), - RubyCommand.Argument(name: "gemfile", value: gemfile), - RubyCommand.Argument(name: "jobs", value: jobs), - RubyCommand.Argument(name: "local", value: local), - RubyCommand.Argument(name: "deployment", value: deployment), - RubyCommand.Argument(name: "no_cache", value: noCache), - RubyCommand.Argument(name: "no_prune", value: noPrune), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "system", value: system), - RubyCommand.Argument(name: "quiet", value: quiet), - RubyCommand.Argument(name: "retry", value: retry), - RubyCommand.Argument(name: "shebang", value: shebang), - RubyCommand.Argument(name: "standalone", value: standalone), - RubyCommand.Argument(name: "trust_policy", value: trustPolicy), - RubyCommand.Argument(name: "without", value: without), - RubyCommand.Argument(name: "with", value: with)]) - _ = runner.executeCommand(command) -} - -/** - Automated localized screenshots of your Android app (via _screengrab_) - - - parameters: - - androidHome: Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx - - buildToolsVersion: The Android build tools version to use, e.g. '23.0.2' - - locales: A list of locales which should be used - - clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running screengrab - - outputDirectory: The directory where to store the screenshots - - skipOpenSummary: Don't open the summary after running _screengrab_ - - appPackageName: The package name of the app under test (e.g. com.yourcompany.yourapp) - - testsPackageName: The package name of the tests bundle (e.g. com.yourcompany.yourapp.test) - - useTestsInPackages: Only run tests in these Java packages - - useTestsInClasses: Only run tests in these Java classes - - launchArguments: Additional launch arguments - - testInstrumentationRunner: The fully qualified class name of your test instrumentation runner - - endingLocale: Return the device to this locale after running tests - - useAdbRoot: Restarts the adb daemon using `adb root` to allow access to screenshots directories on device. Use if getting 'Permission denied' errors - - appApkPath: The path to the APK for the app under test - - testsApkPath: The path to the APK for the the tests bundle - - specificDevice: Use the device or emulator with the given serial number or qualifier - - deviceType: Type of device used for screenshots. Matches Google Play Types (phone, sevenInch, tenInch, tv, wear) - - exitOnTestFailure: Whether or not to exit Screengrab on test failure. Exiting on failure will not copy sceenshots to local machine nor open sceenshots summary - - reinstallApp: Enabling this option will automatically uninstall the application before running it - - useTimestampSuffix: Add timestamp suffix to screenshot filename - - adbHost: Configure the host used by adb to connect, allows running on remote devices farm - */ -func captureAndroidScreenshots(androidHome: String? = nil, - buildToolsVersion: String? = nil, - locales: [String] = ["en-US"], - clearPreviousScreenshots: Bool = false, - outputDirectory: String = "fastlane/metadata/android", - skipOpenSummary: Bool = false, - appPackageName: String, - testsPackageName: String? = nil, - useTestsInPackages: [String]? = nil, - useTestsInClasses: [String]? = nil, - launchArguments: [String]? = nil, - testInstrumentationRunner: String = "androidx.test.runner.AndroidJUnitRunner", - endingLocale: String = "en-US", - useAdbRoot: Bool = false, - appApkPath: String? = nil, - testsApkPath: String? = nil, - specificDevice: String? = nil, - deviceType: String = "phone", - exitOnTestFailure: Bool = true, - reinstallApp: Bool = false, - useTimestampSuffix: Bool = true, - adbHost: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "capture_android_screenshots", className: nil, args: [RubyCommand.Argument(name: "android_home", value: androidHome), - RubyCommand.Argument(name: "build_tools_version", value: buildToolsVersion), - RubyCommand.Argument(name: "locales", value: locales), - RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "skip_open_summary", value: skipOpenSummary), - RubyCommand.Argument(name: "app_package_name", value: appPackageName), - RubyCommand.Argument(name: "tests_package_name", value: testsPackageName), - RubyCommand.Argument(name: "use_tests_in_packages", value: useTestsInPackages), - RubyCommand.Argument(name: "use_tests_in_classes", value: useTestsInClasses), - RubyCommand.Argument(name: "launch_arguments", value: launchArguments), - RubyCommand.Argument(name: "test_instrumentation_runner", value: testInstrumentationRunner), - RubyCommand.Argument(name: "ending_locale", value: endingLocale), - RubyCommand.Argument(name: "use_adb_root", value: useAdbRoot), - RubyCommand.Argument(name: "app_apk_path", value: appApkPath), - RubyCommand.Argument(name: "tests_apk_path", value: testsApkPath), - RubyCommand.Argument(name: "specific_device", value: specificDevice), - RubyCommand.Argument(name: "device_type", value: deviceType), - RubyCommand.Argument(name: "exit_on_test_failure", value: exitOnTestFailure), - RubyCommand.Argument(name: "reinstall_app", value: reinstallApp), - RubyCommand.Argument(name: "use_timestamp_suffix", value: useTimestampSuffix), - RubyCommand.Argument(name: "adb_host", value: adbHost)]) - _ = runner.executeCommand(command) -} - -/** - Generate new localized screenshots on multiple devices (via _snapshot_) - - - parameters: - - workspace: Path the workspace file - - project: Path the project file - - xcargs: Pass additional arguments to xcodebuild for the test phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - xcconfig: Use an extra XCCONFIG file to build your app - - devices: A list of devices you want to take the screenshots from - - languages: A list of languages which should be used - - launchArguments: A list of launch arguments which should be used - - outputDirectory: The directory where to store the screenshots - - outputSimulatorLogs: If the logs generated by the app (e.g. using NSLog, perror, etc.) in the Simulator should be written to the output_directory - - iosVersion: By default, the latest version should be used automatically. If you want to change it, do it here - - skipOpenSummary: Don't open the HTML summary after running _snapshot_ - - skipHelperVersionCheck: Do not check for most recent SnapshotHelper code - - clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot - - reinstallApp: Enabling this option will automatically uninstall the application before running it - - eraseSimulator: Enabling this option will automatically erase the simulator before running the application - - overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception - - localizeSimulator: Enabling this option will configure the Simulator's system language - - darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark) - - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app) - - addPhotos: A list of photos that should be added to the simulator before running the application - - addVideos: A list of videos that should be added to the simulator before running the application - - htmlTemplate: A path to screenshots.html template - - buildlogPath: The directory where to store the build log - - clean: Should the project be cleaned before building it? - - testWithoutBuilding: Test without building, requires a derived data path - - configuration: The configuration to use when building the app. Defaults to 'Release' - - xcprettyArgs: Additional xcpretty arguments - - sdk: The SDK that should be used for building the application - - scheme: The scheme you want to use, this must be the scheme for the UI Tests - - numberOfRetries: The number of times a test can fail before snapshot should stop retrying - - stopAfterFirstError: Should snapshot stop immediately after the tests completely failed on one device? - - derivedDataPath: The directory where build products and other derived data will go - - resultBundle: Should an Xcode result bundle be generated in the output directory - - testTargetName: The name of the target you want to test (if you desire to override the Target Application from Xcode) - - namespaceLogFiles: Separate the log files per device and per language - - concurrentSimulators: Take snapshots on multiple simulators concurrently. Note: This option is only applicable when running against Xcode 9 - - disableSlideToType: Disable the simulator from showing the 'Slide to type' prompt - - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies - - testplan: The testplan associated with the scheme that should be used for testing - - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run - - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip - - disableXcpretty: Disable xcpretty formatting of build - */ -func captureIosScreenshots(workspace: String? = nil, - project: String? = nil, - xcargs: String? = nil, - xcconfig: String? = nil, - devices: [String]? = nil, - languages: [String] = ["en-US"], - launchArguments: [String] = [""], - outputDirectory: String = "screenshots", - outputSimulatorLogs: Bool = false, - iosVersion: String? = nil, - skipOpenSummary: Bool = false, - skipHelperVersionCheck: Bool = false, - clearPreviousScreenshots: Bool = false, - reinstallApp: Bool = false, - eraseSimulator: Bool = false, - overrideStatusBar: Bool = false, - localizeSimulator: Bool = false, - darkMode: Bool? = nil, - appIdentifier: String? = nil, - addPhotos: [String]? = nil, - addVideos: [String]? = nil, - htmlTemplate: String? = nil, - buildlogPath: String = "~/Library/Logs/snapshot", - clean: Bool = false, - testWithoutBuilding: Bool? = nil, - configuration: String? = nil, - xcprettyArgs: String? = nil, - sdk: String? = nil, - scheme: String? = nil, - numberOfRetries: Int = 1, - stopAfterFirstError: Bool = false, - derivedDataPath: String? = nil, - resultBundle: Bool = false, - testTargetName: String? = nil, - namespaceLogFiles: Any? = nil, - concurrentSimulators: Bool = true, - disableSlideToType: Bool = false, - clonedSourcePackagesPath: String? = nil, - testplan: String? = nil, - onlyTesting: Any? = nil, - skipTesting: Any? = nil, - disableXcpretty: Bool? = nil) { - let command = RubyCommand(commandID: "", methodName: "capture_ios_screenshots", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "project", value: project), - RubyCommand.Argument(name: "xcargs", value: xcargs), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "devices", value: devices), - RubyCommand.Argument(name: "languages", value: languages), - RubyCommand.Argument(name: "launch_arguments", value: launchArguments), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "output_simulator_logs", value: outputSimulatorLogs), - RubyCommand.Argument(name: "ios_version", value: iosVersion), - RubyCommand.Argument(name: "skip_open_summary", value: skipOpenSummary), - RubyCommand.Argument(name: "skip_helper_version_check", value: skipHelperVersionCheck), - RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots), - RubyCommand.Argument(name: "reinstall_app", value: reinstallApp), - RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator), - RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar), - RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator), - RubyCommand.Argument(name: "dark_mode", value: darkMode), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "add_photos", value: addPhotos), - RubyCommand.Argument(name: "add_videos", value: addVideos), - RubyCommand.Argument(name: "html_template", value: htmlTemplate), - RubyCommand.Argument(name: "buildlog_path", value: buildlogPath), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs), - RubyCommand.Argument(name: "sdk", value: sdk), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries), - RubyCommand.Argument(name: "stop_after_first_error", value: stopAfterFirstError), - RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath), - RubyCommand.Argument(name: "result_bundle", value: resultBundle), - RubyCommand.Argument(name: "test_target_name", value: testTargetName), - RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles), - RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators), - RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType), - RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath), - RubyCommand.Argument(name: "testplan", value: testplan), - RubyCommand.Argument(name: "only_testing", value: onlyTesting), - RubyCommand.Argument(name: "skip_testing", value: skipTesting), - RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `capture_ios_screenshots` action - - - parameters: - - workspace: Path the workspace file - - project: Path the project file - - xcargs: Pass additional arguments to xcodebuild for the test phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - xcconfig: Use an extra XCCONFIG file to build your app - - devices: A list of devices you want to take the screenshots from - - languages: A list of languages which should be used - - launchArguments: A list of launch arguments which should be used - - outputDirectory: The directory where to store the screenshots - - outputSimulatorLogs: If the logs generated by the app (e.g. using NSLog, perror, etc.) in the Simulator should be written to the output_directory - - iosVersion: By default, the latest version should be used automatically. If you want to change it, do it here - - skipOpenSummary: Don't open the HTML summary after running _snapshot_ - - skipHelperVersionCheck: Do not check for most recent SnapshotHelper code - - clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot - - reinstallApp: Enabling this option will automatically uninstall the application before running it - - eraseSimulator: Enabling this option will automatically erase the simulator before running the application - - overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception - - localizeSimulator: Enabling this option will configure the Simulator's system language - - darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark) - - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app) - - addPhotos: A list of photos that should be added to the simulator before running the application - - addVideos: A list of videos that should be added to the simulator before running the application - - htmlTemplate: A path to screenshots.html template - - buildlogPath: The directory where to store the build log - - clean: Should the project be cleaned before building it? - - testWithoutBuilding: Test without building, requires a derived data path - - configuration: The configuration to use when building the app. Defaults to 'Release' - - xcprettyArgs: Additional xcpretty arguments - - sdk: The SDK that should be used for building the application - - scheme: The scheme you want to use, this must be the scheme for the UI Tests - - numberOfRetries: The number of times a test can fail before snapshot should stop retrying - - stopAfterFirstError: Should snapshot stop immediately after the tests completely failed on one device? - - derivedDataPath: The directory where build products and other derived data will go - - resultBundle: Should an Xcode result bundle be generated in the output directory - - testTargetName: The name of the target you want to test (if you desire to override the Target Application from Xcode) - - namespaceLogFiles: Separate the log files per device and per language - - concurrentSimulators: Take snapshots on multiple simulators concurrently. Note: This option is only applicable when running against Xcode 9 - - disableSlideToType: Disable the simulator from showing the 'Slide to type' prompt - - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies - - testplan: The testplan associated with the scheme that should be used for testing - - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run - - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip - - disableXcpretty: Disable xcpretty formatting of build - */ -func captureScreenshots(workspace: String? = nil, - project: String? = nil, - xcargs: String? = nil, - xcconfig: String? = nil, - devices: [String]? = nil, - languages: [String] = ["en-US"], - launchArguments: [String] = [""], - outputDirectory: String = "screenshots", - outputSimulatorLogs: Bool = false, - iosVersion: String? = nil, - skipOpenSummary: Bool = false, - skipHelperVersionCheck: Bool = false, - clearPreviousScreenshots: Bool = false, - reinstallApp: Bool = false, - eraseSimulator: Bool = false, - overrideStatusBar: Bool = false, - localizeSimulator: Bool = false, - darkMode: Bool? = nil, - appIdentifier: String? = nil, - addPhotos: [String]? = nil, - addVideos: [String]? = nil, - htmlTemplate: String? = nil, - buildlogPath: String = "~/Library/Logs/snapshot", - clean: Bool = false, - testWithoutBuilding: Bool? = nil, - configuration: String? = nil, - xcprettyArgs: String? = nil, - sdk: String? = nil, - scheme: String? = nil, - numberOfRetries: Int = 1, - stopAfterFirstError: Bool = false, - derivedDataPath: String? = nil, - resultBundle: Bool = false, - testTargetName: String? = nil, - namespaceLogFiles: Any? = nil, - concurrentSimulators: Bool = true, - disableSlideToType: Bool = false, - clonedSourcePackagesPath: String? = nil, - testplan: String? = nil, - onlyTesting: Any? = nil, - skipTesting: Any? = nil, - disableXcpretty: Bool? = nil) { - let command = RubyCommand(commandID: "", methodName: "capture_screenshots", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "project", value: project), - RubyCommand.Argument(name: "xcargs", value: xcargs), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "devices", value: devices), - RubyCommand.Argument(name: "languages", value: languages), - RubyCommand.Argument(name: "launch_arguments", value: launchArguments), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "output_simulator_logs", value: outputSimulatorLogs), - RubyCommand.Argument(name: "ios_version", value: iosVersion), - RubyCommand.Argument(name: "skip_open_summary", value: skipOpenSummary), - RubyCommand.Argument(name: "skip_helper_version_check", value: skipHelperVersionCheck), - RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots), - RubyCommand.Argument(name: "reinstall_app", value: reinstallApp), - RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator), - RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar), - RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator), - RubyCommand.Argument(name: "dark_mode", value: darkMode), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "add_photos", value: addPhotos), - RubyCommand.Argument(name: "add_videos", value: addVideos), - RubyCommand.Argument(name: "html_template", value: htmlTemplate), - RubyCommand.Argument(name: "buildlog_path", value: buildlogPath), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs), - RubyCommand.Argument(name: "sdk", value: sdk), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries), - RubyCommand.Argument(name: "stop_after_first_error", value: stopAfterFirstError), - RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath), - RubyCommand.Argument(name: "result_bundle", value: resultBundle), - RubyCommand.Argument(name: "test_target_name", value: testTargetName), - RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles), - RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators), - RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType), - RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath), - RubyCommand.Argument(name: "testplan", value: testplan), - RubyCommand.Argument(name: "only_testing", value: onlyTesting), - RubyCommand.Argument(name: "skip_testing", value: skipTesting), - RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty)]) - _ = runner.executeCommand(command) -} - -/** - Runs `carthage` for your project - - - parameters: - - command: Carthage command (one of: build, bootstrap, update, archive) - - dependencies: Carthage dependencies to update, build or bootstrap - - useSsh: Use SSH for downloading GitHub repositories - - useSubmodules: Add dependencies as Git submodules - - useBinaries: Check out dependency repositories even when prebuilt frameworks exist - - noCheckout: When bootstrapping Carthage do not checkout - - noBuild: When bootstrapping Carthage do not build - - noSkipCurrent: Don't skip building the Carthage project (in addition to its dependencies) - - derivedData: Use derived data folder at path - - verbose: Print xcodebuild output inline - - platform: Define which platform to build for - - cacheBuilds: By default Carthage will rebuild a dependency regardless of whether it's the same resolved version as before. Passing the --cache-builds will cause carthage to avoid rebuilding a dependency if it can - - frameworks: Framework name or names to archive, could be applied only along with the archive command - - output: Output name for the archive, could be applied only along with the archive command. Use following format *.framework.zip - - configuration: Define which build configuration to use when building - - toolchain: Define which xcodebuild toolchain to use when building - - projectDirectory: Define the directory containing the Carthage project - - newResolver: Use new resolver when resolving dependency graph - - logPath: Path to the xcode build output - - executable: Path to the `carthage` executable on your machine - */ -func carthage(command: String = "bootstrap", - dependencies: [String] = [], - useSsh: Bool? = nil, - useSubmodules: Bool? = nil, - useBinaries: Bool? = nil, - noCheckout: Bool? = nil, - noBuild: Bool? = nil, - noSkipCurrent: Bool? = nil, - derivedData: String? = nil, - verbose: Bool? = nil, - platform: String? = nil, - cacheBuilds: Bool = false, - frameworks: [String] = [], - output: String? = nil, - configuration: String? = nil, - toolchain: String? = nil, - projectDirectory: String? = nil, - newResolver: Bool? = nil, - logPath: String? = nil, - executable: String = "carthage") { - let command = RubyCommand(commandID: "", methodName: "carthage", className: nil, args: [RubyCommand.Argument(name: "command", value: command), - RubyCommand.Argument(name: "dependencies", value: dependencies), - RubyCommand.Argument(name: "use_ssh", value: useSsh), - RubyCommand.Argument(name: "use_submodules", value: useSubmodules), - RubyCommand.Argument(name: "use_binaries", value: useBinaries), - RubyCommand.Argument(name: "no_checkout", value: noCheckout), - RubyCommand.Argument(name: "no_build", value: noBuild), - RubyCommand.Argument(name: "no_skip_current", value: noSkipCurrent), - RubyCommand.Argument(name: "derived_data", value: derivedData), - RubyCommand.Argument(name: "verbose", value: verbose), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "cache_builds", value: cacheBuilds), - RubyCommand.Argument(name: "frameworks", value: frameworks), - RubyCommand.Argument(name: "output", value: output), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "toolchain", value: toolchain), - RubyCommand.Argument(name: "project_directory", value: projectDirectory), - RubyCommand.Argument(name: "new_resolver", value: newResolver), - RubyCommand.Argument(name: "log_path", value: logPath), - RubyCommand.Argument(name: "executable", value: executable)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `get_certificates` action - - - parameters: - - development: Create a development certificate instead of a distribution one - - type: Create specific certificate type (takes precedence over :development) - - force: Create a certificate even if an existing certificate exists - - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution) - - username: Your Apple ID Username - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - filename: The filename of certificate to store - - outputPath: The path to a directory in which all certificates and private keys should be stored - - keychainPath: Path to a custom keychain - - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password - - platform: Set the provisioning profile's platform (ios, macos) - - **Important**: It is recommended to use [match](https://docs.fastlane.tools/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your certificates. Use _cert_ directly only if you want full control over what's going on and know more about codesigning. - Use this action to download the latest code signing identity. - */ -func cert(development: Bool = false, - type: String? = nil, - force: Bool = false, - generateAppleCerts: Bool = true, - username: String, - teamId: String? = nil, - teamName: String? = nil, - filename: String? = nil, - outputPath: String = ".", - keychainPath: String, - keychainPassword: String? = nil, - platform: String = "ios") { - let command = RubyCommand(commandID: "", methodName: "cert", className: nil, args: [RubyCommand.Argument(name: "development", value: development), - RubyCommand.Argument(name: "type", value: type), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "filename", value: filename), - RubyCommand.Argument(name: "output_path", value: outputPath), - RubyCommand.Argument(name: "keychain_path", value: keychainPath), - RubyCommand.Argument(name: "keychain_password", value: keychainPassword), - RubyCommand.Argument(name: "platform", value: platform)]) - _ = runner.executeCommand(command) -} - -/** - Collect git commit messages into a changelog - - - parameters: - - between: Array containing two Git revision values between which to collect messages, you mustn't use it with :commits_count key at the same time - - commitsCount: Number of commits to include in changelog, you mustn't use it with :between key at the same time - - path: Path of the git repository - - pretty: The format applied to each commit while generating the collected value - - dateFormat: The date format applied to each commit while generating the collected value - - ancestryPath: Whether or not to use ancestry-path param - - tagMatchPattern: A glob(7) pattern to match against when finding the last git tag - - matchLightweightTag: Whether or not to match a lightweight tag when searching for the last one - - quiet: Whether or not to disable changelog output - - includeMerges: **DEPRECATED!** Use `:merge_commit_filtering` instead - Whether or not to include any commits that are merges - - mergeCommitFiltering: Controls inclusion of merge commits when collecting the changelog. Valid values: `:include_merges`, `:exclude_merges`, `:only_include_merges` - - - returns: Returns a String containing your formatted git commits - - By default, messages will be collected back to the last tag, but the range can be controlled - */ -@discardableResult func changelogFromGitCommits(between: Any? = nil, - commitsCount: Int? = nil, - path: String = "./", - pretty: String = "%B", - dateFormat: String? = nil, - ancestryPath: Bool = false, - tagMatchPattern: String? = nil, - matchLightweightTag: Bool = true, - quiet: Bool = false, - includeMerges: Bool? = nil, - mergeCommitFiltering: String = "include_merges") -> String { - let command = RubyCommand(commandID: "", methodName: "changelog_from_git_commits", className: nil, args: [RubyCommand.Argument(name: "between", value: between), - RubyCommand.Argument(name: "commits_count", value: commitsCount), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "pretty", value: pretty), - RubyCommand.Argument(name: "date_format", value: dateFormat), - RubyCommand.Argument(name: "ancestry_path", value: ancestryPath), - RubyCommand.Argument(name: "tag_match_pattern", value: tagMatchPattern), - RubyCommand.Argument(name: "match_lightweight_tag", value: matchLightweightTag), - RubyCommand.Argument(name: "quiet", value: quiet), - RubyCommand.Argument(name: "include_merges", value: includeMerges), - RubyCommand.Argument(name: "merge_commit_filtering", value: mergeCommitFiltering)]) - return runner.executeCommand(command) -} - -/** - Send a success/error message to [ChatWork](https://go.chatwork.com/) - - - parameters: - - apiToken: ChatWork API Token - - message: The message to post on ChatWork - - roomid: The room ID - - success: Was this build successful? (true/false) - - Information on how to obtain an API token: [http://developer.chatwork.com/ja/authenticate.html](http://developer.chatwork.com/ja/authenticate.html) - */ -func chatwork(apiToken: String, - message: String, - roomid: Any, - success: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "chatwork", className: nil, args: [RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "roomid", value: roomid), - RubyCommand.Argument(name: "success", value: success)]) - _ = runner.executeCommand(command) -} - -/** - Check your app's metadata before you submit your app to review (via _precheck_) - - - parameters: - - appIdentifier: The bundle identifier of your app - - username: Your Apple ID Username - - teamId: The ID of your App Store Connect team if you're in multiple teams - - teamName: The name of your App Store Connect team if you're in multiple teams - - defaultRuleLevel: The default rule level unless otherwise configured - - includeInAppPurchases: Should check in-app purchases? - - negativeAppleSentiment: mentioning  in a way that could be considered negative - - placeholderText: using placeholder text (e.g.:"lorem ipsum", "text here", etc...) - - otherPlatforms: mentioning other platforms, like Android or Blackberry - - futureFunctionality: mentioning features or content that is not currently available in your app - - testWords: using text indicating this release is a test - - curseWords: including words that might be considered objectionable - - freeStuffInIap: using text indicating that your IAP is free - - customText: mentioning any of the user-specified words passed to custom_text(data: [words]) - - copyrightDate: using a copyright date that is any different from this current year, or missing a date - - unreachableUrls: unreachable URLs in app metadata - - - returns: true if precheck passes, else, false - - More information: https://fastlane.tools/precheck - */ -func checkAppStoreMetadata(appIdentifier: String, - username: String, - teamId: String? = nil, - teamName: String? = nil, - defaultRuleLevel: Any = "error", - includeInAppPurchases: Bool = true, - negativeAppleSentiment: Any? = nil, - placeholderText: Any? = nil, - otherPlatforms: Any? = nil, - futureFunctionality: Any? = nil, - testWords: Any? = nil, - curseWords: Any? = nil, - freeStuffInIap: Any? = nil, - customText: Any? = nil, - copyrightDate: Any? = nil, - unreachableUrls: Any? = nil) { - let command = RubyCommand(commandID: "", methodName: "check_app_store_metadata", className: nil, args: [RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "default_rule_level", value: defaultRuleLevel), - RubyCommand.Argument(name: "include_in_app_purchases", value: includeInAppPurchases), - RubyCommand.Argument(name: "negative_apple_sentiment", value: negativeAppleSentiment), - RubyCommand.Argument(name: "placeholder_text", value: placeholderText), - RubyCommand.Argument(name: "other_platforms", value: otherPlatforms), - RubyCommand.Argument(name: "future_functionality", value: futureFunctionality), - RubyCommand.Argument(name: "test_words", value: testWords), - RubyCommand.Argument(name: "curse_words", value: curseWords), - RubyCommand.Argument(name: "free_stuff_in_iap", value: freeStuffInIap), - RubyCommand.Argument(name: "custom_text", value: customText), - RubyCommand.Argument(name: "copyright_date", value: copyrightDate), - RubyCommand.Argument(name: "unreachable_urls", value: unreachableUrls)]) - _ = runner.executeCommand(command) -} - -/** - Deletes files created as result of running gym, cert, sigh or download_dsyms - - - parameter excludePattern: Exclude all files from clearing that match the given Regex pattern: e.g. '.*.mobileprovision' - - This action deletes the files that get created in your repo as a result of running the _gym_ and _sigh_ commands. It doesn't delete the `fastlane/report.xml` though, this is probably more suited for the .gitignore. - - Useful if you quickly want to send out a test build by dropping down to the command line and typing something like `fastlane beta`, without leaving your repo in a messy state afterwards. - */ -func cleanBuildArtifacts(excludePattern: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "clean_build_artifacts", className: nil, args: [RubyCommand.Argument(name: "exclude_pattern", value: excludePattern)]) - _ = runner.executeCommand(command) -} - -/** - Remove the cache for pods - - - parameter name: Pod name to be removed from cache - */ -func cleanCocoapodsCache(name: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "clean_cocoapods_cache", className: nil, args: [RubyCommand.Argument(name: "name", value: name)]) - _ = runner.executeCommand(command) -} - -/** - Deletes the Xcode Derived Data - - - parameter derivedDataPath: Custom path for derivedData - - Deletes the Derived Data from path set on Xcode or a supplied path - */ -func clearDerivedData(derivedDataPath: String = "~/Library/Developer/Xcode/DerivedData") { - let command = RubyCommand(commandID: "", methodName: "clear_derived_data", className: nil, args: [RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath)]) - _ = runner.executeCommand(command) -} - -/** - Copies a given string into the clipboard. Works only on macOS - - - parameter value: The string that should be copied into the clipboard - */ -func clipboard(value: String) { - let command = RubyCommand(commandID: "", methodName: "clipboard", className: nil, args: [RubyCommand.Argument(name: "value", value: value)]) - _ = runner.executeCommand(command) -} - -/** - Generates a Code Count that can be read by Jenkins (xml format) - - - parameters: - - binaryPath: Where the cloc binary lives on your system (full path including 'cloc') - - excludeDir: Comma separated list of directories to exclude - - outputDirectory: Where to put the generated report file - - sourceDirectory: Where to look for the source code (relative to the project root folder) - - xml: Should we generate an XML File (if false, it will generate a plain text file)? - - This action will run cloc to generate a SLOC report that the Jenkins SLOCCount plugin can read. - See [https://wiki.jenkins-ci.org/display/JENKINS/SLOCCount+Plugin](https://wiki.jenkins-ci.org/display/JENKINS/SLOCCount+Plugin) and [https://github.com/AlDanial/cloc](https://github.com/AlDanial/cloc) for more information. - */ -func cloc(binaryPath: String = "/usr/local/bin/cloc", - excludeDir: String? = nil, - outputDirectory: String = "build", - sourceDirectory: String = "", - xml: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "cloc", className: nil, args: [RubyCommand.Argument(name: "binary_path", value: binaryPath), - RubyCommand.Argument(name: "exclude_dir", value: excludeDir), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "source_directory", value: sourceDirectory), - RubyCommand.Argument(name: "xml", value: xml)]) - _ = runner.executeCommand(command) -} - -/** - Print a Club Mate in your build output - */ -func clubmate() { - let command = RubyCommand(commandID: "", methodName: "clubmate", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Runs `pod install` for the project - - - parameters: - - repoUpdate: Add `--repo-update` flag to `pod install` command - - cleanInstall: Execute a full pod installation ignoring the content of the project cache - - silent: Execute command without logging output - - verbose: Show more debugging information - - ansi: Show output with ANSI codes - - useBundleExec: Use bundle exec when there is a Gemfile presented - - podfile: Explicitly specify the path to the Cocoapods' Podfile. You can either set it to the Podfile's path or to the folder containing the Podfile file - - errorCallback: A callback invoked with the command output if there is a non-zero exit status - - tryRepoUpdateOnError: Retry with --repo-update if action was finished with error - - deployment: Disallow any changes to the Podfile or the Podfile.lock during installation - - clean: **DEPRECATED!** (Option renamed as clean_install) Remove SCM directories - - integrate: **DEPRECATED!** (Option removed from cocoapods) Integrate the Pods libraries into the Xcode project(s) - - If you use [CocoaPods](http://cocoapods.org) you can use the `cocoapods` integration to run `pod install` before building your app. - */ -func cocoapods(repoUpdate: Bool = false, - cleanInstall: Bool = false, - silent: Bool = false, - verbose: Bool = false, - ansi: Bool = true, - useBundleExec: Bool = true, - podfile: String? = nil, - errorCallback: ((String) -> Void)? = nil, - tryRepoUpdateOnError: Bool = false, - deployment: Bool = false, - clean: Bool = true, - integrate: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "cocoapods", className: nil, args: [RubyCommand.Argument(name: "repo_update", value: repoUpdate), - RubyCommand.Argument(name: "clean_install", value: cleanInstall), - RubyCommand.Argument(name: "silent", value: silent), - RubyCommand.Argument(name: "verbose", value: verbose), - RubyCommand.Argument(name: "ansi", value: ansi), - RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec), - RubyCommand.Argument(name: "podfile", value: podfile), - RubyCommand.Argument(name: "error_callback", value: errorCallback, type: .stringClosure), - RubyCommand.Argument(name: "try_repo_update_on_error", value: tryRepoUpdateOnError), - RubyCommand.Argument(name: "deployment", value: deployment), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "integrate", value: integrate)]) - _ = runner.executeCommand(command) -} - -/** - This will commit a file directly on GitHub via the API - - - parameters: - - repositoryName: The path to your repo, e.g. 'fastlane/fastlane' - - serverUrl: The server url. e.g. 'https://your.internal.github.host/api/v3' (Default: 'https://api.github.com') - - apiToken: Personal API Token for GitHub - generate one at https://github.com/settings/tokens - - branch: The branch that the file should be committed on (default: master) - - path: The relative path to your file from project root e.g. assets/my_app.xcarchive - - message: The commit message. Defaults to the file name - - secure: Optionally disable secure requests (ssl_verify_peer) - - - returns: A hash containing all relevant information for this commit - Access things like 'html_url', 'sha', 'message' - - Commits a file directly to GitHub. You must provide your GitHub Personal token (get one from [https://github.com/settings/tokens/new](https://github.com/settings/tokens/new)), the repository name and the relative file path from the root git project. - Out parameters provide the commit sha created, which can be used for later usage for examples such as releases, the direct download link and the full response JSON. - Documentation: [https://developer.github.com/v3/repos/contents/#create-a-file](https://developer.github.com/v3/repos/contents/#create-a-file). - */ -@discardableResult func commitGithubFile(repositoryName: String, - serverUrl: String = "https://api.github.com", - apiToken: String, - branch: String = "master", - path: String, - message: String? = nil, - secure: Bool = true) -> [String: String] { - let command = RubyCommand(commandID: "", methodName: "commit_github_file", className: nil, args: [RubyCommand.Argument(name: "repository_name", value: repositoryName), - RubyCommand.Argument(name: "server_url", value: serverUrl), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "branch", value: branch), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "secure", value: secure)]) - return parseDictionary(fromString: runner.executeCommand(command)) -} - -/** - Creates a 'Version Bump' commit. Run after `increment_build_number` - - - parameters: - - message: The commit message when committing the version bump - - xcodeproj: The path to your project file (Not the workspace). If you have only one, this is optional - - force: Forces the commit, even if other files than the ones containing the version number have been modified - - settings: Include Settings.bundle/Root.plist with version bump - - ignore: A regular expression used to filter matched plist files to be modified - - include: A list of extra files to be included in the version bump (string array or comma-separated string) - - noVerify: Whether or not to use --no-verify - - This action will create a 'Version Bump' commit in your repo. Useful in conjunction with `increment_build_number`. - It checks the repo to make sure that only the relevant files have changed. These are the files that `increment_build_number` (`agvtool`) touches:| - | - >- All `.plist` files| - - The `.xcodeproj/project.pbxproj` file| - >| - Then commits those files to the repo. - Customize the message with the `:message` option. It defaults to 'Version Bump'. - If you have other uncommitted changes in your repo, this action will fail. If you started off in a clean repo, and used the _ipa_ and or _sigh_ actions, then you can use the [clean_build_artifacts](https://docs.fastlane.tools/actions/clean_build_artifacts/) action to clean those temporary files up before running this action. - */ -func commitVersionBump(message: String? = nil, - xcodeproj: String? = nil, - force: Bool = false, - settings: Bool = false, - ignore: Any? = nil, - include: [String] = [], - noVerify: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "commit_version_bump", className: nil, args: [RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "xcodeproj", value: xcodeproj), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "settings", value: settings), - RubyCommand.Argument(name: "ignore", value: ignore), - RubyCommand.Argument(name: "include", value: include), - RubyCommand.Argument(name: "no_verify", value: noVerify)]) - _ = runner.executeCommand(command) -} - -/** - Copy and save your build artifacts (useful when you use reset_git_repo) - - - parameters: - - keepOriginal: Set this to false if you want move, rather than copy, the found artifacts - - targetPath: The directory in which you want your artifacts placed - - artifacts: An array of file patterns of the files/folders you want to preserve - - failOnMissing: Fail when a source file isn't found - - This action copies artifacts to a target directory. It's useful if you have a CI that will pick up these artifacts and attach them to the build. Useful e.g. for storing your `.ipa`s, `.dSYM.zip`s, `.mobileprovision`s, `.cert`s. - Make sure your `:target_path` is ignored from git, and if you use `reset_git_repo`, make sure the artifacts are added to the exclude list. - */ -func copyArtifacts(keepOriginal: Bool = true, - targetPath: Any = "artifacts", - artifacts: [String] = [], - failOnMissing: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "copy_artifacts", className: nil, args: [RubyCommand.Argument(name: "keep_original", value: keepOriginal), - RubyCommand.Argument(name: "target_path", value: targetPath), - RubyCommand.Argument(name: "artifacts", value: artifacts), - RubyCommand.Argument(name: "fail_on_missing", value: failOnMissing)]) - _ = runner.executeCommand(command) -} - -/** - Refer to [Firebase App Distribution](https://appdistro.page.link/fastlane-repo) - - - parameters: - - ipaPath: Path to your IPA file. Optional if you use the _gym_ or _xcodebuild_ action - - apkPath: Path to your APK file - - crashlyticsPath: Path to the submit binary in the Crashlytics bundle (iOS) or `crashlytics-devtools.jar` file (Android) - - apiToken: Crashlytics API Key - - buildSecret: Crashlytics Build Secret - - notesPath: Path to the release notes - - notes: The release notes as string - uses :notes_path under the hood - - groups: The groups used for distribution, separated by commas - - emails: Pass email addresses of testers, separated by commas - - notifications: Crashlytics notification option (true/false) - - debug: Crashlytics debug option (true/false) - - Additionally, you can specify `notes`, `emails`, `groups` and `notifications`. - Distributing to Groups: When using the `groups` parameter, it's important to use the group **alias** names for each group you'd like to distribute to. A group's alias can be found in the web UI. If you're viewing the Beta page, you can open the groups dialog by clicking the 'Manage Groups' button. - This action uses the `submit` binary provided by the Crashlytics framework. If the binary is not found in its usual path, you'll need to specify the path manually by using the `crashlytics_path` option. - */ -func crashlytics(ipaPath: String? = nil, - apkPath: String? = nil, - crashlyticsPath: String? = nil, - apiToken: String, - buildSecret: String, - notesPath: String? = nil, - notes: String? = nil, - groups: Any? = nil, - emails: Any? = nil, - notifications: Bool = true, - debug: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "crashlytics", className: nil, args: [RubyCommand.Argument(name: "ipa_path", value: ipaPath), - RubyCommand.Argument(name: "apk_path", value: apkPath), - RubyCommand.Argument(name: "crashlytics_path", value: crashlyticsPath), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "build_secret", value: buildSecret), - RubyCommand.Argument(name: "notes_path", value: notesPath), - RubyCommand.Argument(name: "notes", value: notes), - RubyCommand.Argument(name: "groups", value: groups), - RubyCommand.Argument(name: "emails", value: emails), - RubyCommand.Argument(name: "notifications", value: notifications), - RubyCommand.Argument(name: "debug", value: debug)]) - _ = runner.executeCommand(command) -} - -/** - Create Managed Google Play Apps - - - parameters: - - jsonKey: The path to a file containing service account JSON, used to authenticate with Google - - jsonKeyData: The raw service account JSON data used to authenticate with Google - - developerAccountId: The ID of your Google Play Console account. Can be obtained from the URL when you log in (`https://play.google.com/apps/publish/?account=...` or when you 'Obtain private app publishing rights' (https://developers.google.com/android/work/play/custom-app-api/get-started#retrieve_the_developer_account_id) - - apk: Path to the APK file to upload - - appTitle: App Title - - language: Default app language (e.g. 'en_US') - - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/ - - timeout: Timeout for read, open, and send (in seconds) - - Create new apps on Managed Google Play. - */ -func createAppOnManagedPlayStore(jsonKey: String? = nil, - jsonKeyData: String? = nil, - developerAccountId: String, - apk: String, - appTitle: String, - language: String = "en_US", - rootUrl: String? = nil, - timeout: Int = 300) { - let command = RubyCommand(commandID: "", methodName: "create_app_on_managed_play_store", className: nil, args: [RubyCommand.Argument(name: "json_key", value: jsonKey), - RubyCommand.Argument(name: "json_key_data", value: jsonKeyData), - RubyCommand.Argument(name: "developer_account_id", value: developerAccountId), - RubyCommand.Argument(name: "apk", value: apk), - RubyCommand.Argument(name: "app_title", value: appTitle), - RubyCommand.Argument(name: "language", value: language), - RubyCommand.Argument(name: "root_url", value: rootUrl), - RubyCommand.Argument(name: "timeout", value: timeout)]) - _ = runner.executeCommand(command) -} - -/** - Creates the given application on iTC and the Dev Portal (via _produce_) - - - parameters: - - username: Your Apple ID Username - - appIdentifier: App Identifier (Bundle ID, e.g. com.krausefx.app) - - bundleIdentifierSuffix: App Identifier Suffix (Ignored if App Identifier does not end with .*) - - appName: App Name - - appVersion: Initial version number (e.g. '1.0') - - sku: SKU Number (e.g. '1234') - - platform: The platform to use (optional) - - platforms: The platforms to use (optional) - - language: Primary Language (e.g. 'en-US', 'fr-FR') - - companyName: The name of your company. Only required if it's the first app you create - - skipItc: Skip the creation of the app on App Store Connect - - itcUsers: Array of App Store Connect users. If provided, you can limit access to this newly created app for users with the App Manager, Developer, Marketer or Sales roles - - enabledFeatures: **DEPRECATED!** Please use `enable_services` instead - Array with Spaceship App Services - - enableServices: Array with Spaceship App Services (e.g. access_wifi: (on|off), app_group: (on|off), apple_pay: (on|off), associated_domains: (on|off), auto_fill_credential: (on|off), data_protection: (complete|unlessopen|untilfirstauth), game_center: (on|off), health_kit: (on|off), home_kit: (on|off), hotspot: (on|off), icloud: (legacy|cloudkit), in_app_purchase: (on|off), inter_app_audio: (on|off), multipath: (on|off), network_extension: (on|off), nfc_tag_reading: (on|off), personal_vpn: (on|off), passbook: (on|off), push_notification: (on|off), siri_kit: (on|off), vpn_configuration: (on|off), wallet: (on|off), wireless_accessory: (on|off)) - - skipDevcenter: Skip the creation of the app on the Apple Developer Portal - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - itcTeamId: The ID of your App Store Connect team if you're in multiple teams - - itcTeamName: The name of your App Store Connect team if you're in multiple teams - - Create new apps on App Store Connect and Apple Developer Portal via _produce_. - If the app already exists, `create_app_online` will not do anything. - For more information about _produce_, visit its documentation page: [https://docs.fastlane.tools/actions/produce/](https://docs.fastlane.tools/actions/produce/). - */ -func createAppOnline(username: String, - appIdentifier: String, - bundleIdentifierSuffix: String? = nil, - appName: String, - appVersion: String? = nil, - sku: String, - platform: String = "ios", - platforms: [String]? = nil, - language: String = "English", - companyName: String? = nil, - skipItc: Bool = false, - itcUsers: [String]? = nil, - enabledFeatures: [String: Any] = [:], - enableServices: [String: Any] = [:], - skipDevcenter: Bool = false, - teamId: String? = nil, - teamName: String? = nil, - itcTeamId: Any? = nil, - itcTeamName: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "create_app_online", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "bundle_identifier_suffix", value: bundleIdentifierSuffix), - RubyCommand.Argument(name: "app_name", value: appName), - RubyCommand.Argument(name: "app_version", value: appVersion), - RubyCommand.Argument(name: "sku", value: sku), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "platforms", value: platforms), - RubyCommand.Argument(name: "language", value: language), - RubyCommand.Argument(name: "company_name", value: companyName), - RubyCommand.Argument(name: "skip_itc", value: skipItc), - RubyCommand.Argument(name: "itc_users", value: itcUsers), - RubyCommand.Argument(name: "enabled_features", value: enabledFeatures), - RubyCommand.Argument(name: "enable_services", value: enableServices), - RubyCommand.Argument(name: "skip_devcenter", value: skipDevcenter), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "itc_team_id", value: itcTeamId), - RubyCommand.Argument(name: "itc_team_name", value: itcTeamName)]) - _ = runner.executeCommand(command) -} - -/** - Create a new Keychain - - - parameters: - - name: Keychain name - - path: Path to keychain - - password: Password for the keychain - - defaultKeychain: Should the newly created Keychain be the new system default keychain - - unlock: Unlock keychain after create - - timeout: timeout interval in seconds. Set `false` if you want to specify "no time-out" - - lockWhenSleeps: Lock keychain when the system sleeps - - lockAfterTimeout: Lock keychain after timeout interval - - addToSearchList: Add keychain to search list - - requireCreate: Fail the action if the Keychain already exists - */ -func createKeychain(name: String? = nil, - path: String? = nil, - password: String, - defaultKeychain: Bool = false, - unlock: Bool = false, - timeout: Int = 300, - lockWhenSleeps: Bool = false, - lockAfterTimeout: Bool = false, - addToSearchList: Bool = true, - requireCreate: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "create_keychain", className: nil, args: [RubyCommand.Argument(name: "name", value: name), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "password", value: password), - RubyCommand.Argument(name: "default_keychain", value: defaultKeychain), - RubyCommand.Argument(name: "unlock", value: unlock), - RubyCommand.Argument(name: "timeout", value: timeout), - RubyCommand.Argument(name: "lock_when_sleeps", value: lockWhenSleeps), - RubyCommand.Argument(name: "lock_after_timeout", value: lockAfterTimeout), - RubyCommand.Argument(name: "add_to_search_list", value: addToSearchList), - RubyCommand.Argument(name: "require_create", value: requireCreate)]) - _ = runner.executeCommand(command) -} - -/** - This will create a new pull request on GitHub - - - parameters: - - apiToken: Personal API Token for GitHub - generate one at https://github.com/settings/tokens - - repo: The name of the repository you want to submit the pull request to - - title: The title of the pull request - - body: The contents of the pull request - - draft: Indicates whether the pull request is a draft - - labels: The labels for the pull request - - milestone: The milestone ID (Integer) for the pull request - - head: The name of the branch where your changes are implemented (defaults to the current branch name) - - base: The name of the branch you want your changes pulled into (defaults to `master`) - - apiUrl: The URL of GitHub API - used when the Enterprise (default to `https://api.github.com`) - - assignees: The assignees for the pull request - - reviewers: The reviewers (slug) for the pull request - - teamReviewers: The team reviewers (slug) for the pull request - - - returns: The pull request URL when successful - */ -func createPullRequest(apiToken: String, - repo: String, - title: String, - body: String? = nil, - draft: Bool? = nil, - labels: [String]? = nil, - milestone: String? = nil, - head: String? = nil, - base: String = "master", - apiUrl: String = "https://api.github.com", - assignees: [String]? = nil, - reviewers: [String]? = nil, - teamReviewers: [String]? = nil) { - let command = RubyCommand(commandID: "", methodName: "create_pull_request", className: nil, args: [RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "repo", value: repo), - RubyCommand.Argument(name: "title", value: title), - RubyCommand.Argument(name: "body", value: body), - RubyCommand.Argument(name: "draft", value: draft), - RubyCommand.Argument(name: "labels", value: labels), - RubyCommand.Argument(name: "milestone", value: milestone), - RubyCommand.Argument(name: "head", value: head), - RubyCommand.Argument(name: "base", value: base), - RubyCommand.Argument(name: "api_url", value: apiUrl), - RubyCommand.Argument(name: "assignees", value: assignees), - RubyCommand.Argument(name: "reviewers", value: reviewers), - RubyCommand.Argument(name: "team_reviewers", value: teamReviewers)]) - _ = runner.executeCommand(command) -} - -/** - Runs `danger` for the project - - - parameters: - - useBundleExec: Use bundle exec when there is a Gemfile presented - - verbose: Show more debugging information - - dangerId: The identifier of this Danger instance - - dangerfile: The location of your Dangerfile - - githubApiToken: GitHub API token for danger - - failOnErrors: Should always fail the build process, defaults to false - - newComment: Makes Danger post a new comment instead of editing its previous one - - removePreviousComments: Makes Danger remove all previous comment and create a new one in the end of the list - - base: A branch/tag/commit to use as the base of the diff. [master|dev|stable] - - head: A branch/tag/commit to use as the head. [master|dev|stable] - - pr: Run danger on a specific pull request. e.g. "https://github.com/danger/danger/pull/518" - - Formalize your Pull Request etiquette. - More information: [https://github.com/danger/danger](https://github.com/danger/danger). - */ -func danger(useBundleExec: Bool = true, - verbose: Bool = false, - dangerId: String? = nil, - dangerfile: String? = nil, - githubApiToken: String? = nil, - failOnErrors: Bool = false, - newComment: Bool = false, - removePreviousComments: Bool = false, - base: String? = nil, - head: String? = nil, - pr: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "danger", className: nil, args: [RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec), - RubyCommand.Argument(name: "verbose", value: verbose), - RubyCommand.Argument(name: "danger_id", value: dangerId), - RubyCommand.Argument(name: "dangerfile", value: dangerfile), - RubyCommand.Argument(name: "github_api_token", value: githubApiToken), - RubyCommand.Argument(name: "fail_on_errors", value: failOnErrors), - RubyCommand.Argument(name: "new_comment", value: newComment), - RubyCommand.Argument(name: "remove_previous_comments", value: removePreviousComments), - RubyCommand.Argument(name: "base", value: base), - RubyCommand.Argument(name: "head", value: head), - RubyCommand.Argument(name: "pr", value: pr)]) - _ = runner.executeCommand(command) -} - -/** - Print out an overview of the lane context values - */ -func debug() { - let command = RubyCommand(commandID: "", methodName: "debug", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Defines a default platform to not have to specify the platform - */ -func defaultPlatform() { - let command = RubyCommand(commandID: "", methodName: "default_platform", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Delete keychains and remove them from the search list - - - parameters: - - name: Keychain name - - keychainPath: Keychain path - - Keychains can be deleted after being created with `create_keychain` - */ -func deleteKeychain(name: String? = nil, - keychainPath: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "delete_keychain", className: nil, args: [RubyCommand.Argument(name: "name", value: name), - RubyCommand.Argument(name: "keychain_path", value: keychainPath)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `upload_to_app_store` action - - - parameters: - - username: Your Apple ID Username - - appIdentifier: The bundle identifier of your app - - appVersion: The version that should be edited or created - - ipa: Path to your ipa file - - pkg: Path to your pkg file - - buildNumber: If set the given build number (already uploaded to iTC) will be used instead of the current built one - - platform: The platform to use (optional) - - editLive: Modify live metadata, this option disables ipa upload and screenshot upload - - useLiveVersion: Force usage of live version rather than edit version - - metadataPath: Path to the folder containing the metadata files - - screenshotsPath: Path to the folder containing the screenshots - - skipBinaryUpload: Skip uploading an ipa or pkg to App Store Connect - - skipScreenshots: Don't upload the screenshots - - skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots - - skipAppVersionUpdate: Don't update app version for submission - - force: Skip the HTML report file verification - - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones - - submitForReview: Submit the new version for Review after uploading everything - - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible - - automaticRelease: Should the app be automatically released once it's approved? (Can not be used together with `auto_release_date`) - - autoReleaseDate: Date in milliseconds for automatically releasing on pending approval (Can not be used together with `automatic_release`) - - phasedRelease: Enable the phased release feature of iTC - - resetRatings: Reset the summary rating when you release a new version of the application - - priceTier: The price tier of this application - - appRatingConfigPath: Path to the app rating's config - - submissionInformation: Extra information for the submission (e.g. compliance specifications, IDFA settings) - - teamId: The ID of your App Store Connect team if you're in multiple teams - - teamName: The name of your App Store Connect team if you're in multiple teams - - devPortalTeamId: The short ID of your Developer Portal team, if you're in multiple teams. Different from your iTC team ID! - - devPortalTeamName: The name of your Developer Portal team if you're in multiple teams - - itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column - - runPrecheckBeforeSubmit: Run precheck before submitting to app review - - precheckDefaultRuleLevel: The default precheck rule level unless otherwise configured - - individualMetadataItems: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - An array of localized metadata items to upload individually by language so that errors can be identified. E.g. ['name', 'keywords', 'description']. Note: slow - - appIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the app icon - - appleWatchAppIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the Apple Watch app icon - - copyright: Metadata: The copyright notice - - primaryCategory: Metadata: The english name of the primary category (e.g. `Business`, `Books`) - - secondaryCategory: Metadata: The english name of the secondary category (e.g. `Business`, `Books`) - - primaryFirstSubCategory: Metadata: The english name of the primary first sub category (e.g. `Educational`, `Puzzle`) - - primarySecondSubCategory: Metadata: The english name of the primary second sub category (e.g. `Educational`, `Puzzle`) - - secondaryFirstSubCategory: Metadata: The english name of the secondary first sub category (e.g. `Educational`, `Puzzle`) - - secondarySecondSubCategory: Metadata: The english name of the secondary second sub category (e.g. `Educational`, `Puzzle`) - - tradeRepresentativeContactInformation: Metadata: A hash containing the trade representative contact information - - appReviewInformation: Metadata: A hash containing the review information - - appReviewAttachmentFile: Metadata: Path to the app review attachment file - - description: Metadata: The localised app description - - name: Metadata: The localised app name - - subtitle: Metadata: The localised app subtitle - - keywords: Metadata: An array of localised keywords - - promotionalText: Metadata: An array of localised promotional texts - - releaseNotes: Metadata: Localised release notes for this version - - privacyUrl: Metadata: Localised privacy url - - appleTvPrivacyPolicy: Metadata: Localised Apple TV privacy policy text - - supportUrl: Metadata: Localised support url - - marketingUrl: Metadata: Localised marketing url - - languages: Metadata: List of languages to activate - - ignoreLanguageDirectoryValidation: Ignore errors when invalid languages are found in metadata and screenshot directories - - precheckIncludeInAppPurchases: Should precheck check in-app purchases? - - app: The (spaceship) app ID of the app you want to use/modify - - Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration. - - If you don't want a PDF report for App Store builds, use the `:force` option. - This is useful when running _fastlane_ on your Continuous Integration server: - `_upload_to_app_store_(force: true)` - If your account is on multiple teams and you need to tell the `iTMSTransporter` which 'provider' to use, you can set the `:itc_provider` option to pass this info. - */ -func deliver(username: Any = deliverfile.username, - appIdentifier: Any? = deliverfile.appIdentifier, - appVersion: Any? = deliverfile.appVersion, - ipa: Any? = deliverfile.ipa, - pkg: Any? = deliverfile.pkg, - buildNumber: Any? = deliverfile.buildNumber, - platform: Any = deliverfile.platform, - editLive: Bool = deliverfile.editLive, - useLiveVersion: Bool = deliverfile.useLiveVersion, - metadataPath: Any? = deliverfile.metadataPath, - screenshotsPath: Any? = deliverfile.screenshotsPath, - skipBinaryUpload: Bool = deliverfile.skipBinaryUpload, - skipScreenshots: Bool = deliverfile.skipScreenshots, - skipMetadata: Bool = deliverfile.skipMetadata, - skipAppVersionUpdate: Bool = deliverfile.skipAppVersionUpdate, - force: Bool = deliverfile.force, - overwriteScreenshots: Bool = deliverfile.overwriteScreenshots, - submitForReview: Bool = deliverfile.submitForReview, - rejectIfPossible: Bool = deliverfile.rejectIfPossible, - automaticRelease: Bool = deliverfile.automaticRelease, - autoReleaseDate: Int? = deliverfile.autoReleaseDate, - phasedRelease: Bool = deliverfile.phasedRelease, - resetRatings: Bool = deliverfile.resetRatings, - priceTier: Any? = deliverfile.priceTier, - appRatingConfigPath: Any? = deliverfile.appRatingConfigPath, - submissionInformation: [String: Any]? = deliverfile.submissionInformation, - teamId: Any? = deliverfile.teamId, - teamName: Any? = deliverfile.teamName, - devPortalTeamId: Any? = deliverfile.devPortalTeamId, - devPortalTeamName: Any? = deliverfile.devPortalTeamName, - itcProvider: Any? = deliverfile.itcProvider, - runPrecheckBeforeSubmit: Bool = deliverfile.runPrecheckBeforeSubmit, - precheckDefaultRuleLevel: Any = deliverfile.precheckDefaultRuleLevel, - individualMetadataItems: [String]? = deliverfile.individualMetadataItems, - appIcon: Any? = deliverfile.appIcon, - appleWatchAppIcon: Any? = deliverfile.appleWatchAppIcon, - copyright: Any? = deliverfile.copyright, - primaryCategory: Any? = deliverfile.primaryCategory, - secondaryCategory: Any? = deliverfile.secondaryCategory, - primaryFirstSubCategory: Any? = deliverfile.primaryFirstSubCategory, - primarySecondSubCategory: Any? = deliverfile.primarySecondSubCategory, - secondaryFirstSubCategory: Any? = deliverfile.secondaryFirstSubCategory, - secondarySecondSubCategory: Any? = deliverfile.secondarySecondSubCategory, - tradeRepresentativeContactInformation: [String: Any]? = deliverfile.tradeRepresentativeContactInformation, - appReviewInformation: [String: Any]? = deliverfile.appReviewInformation, - appReviewAttachmentFile: Any? = deliverfile.appReviewAttachmentFile, - description: Any? = deliverfile.description, - name: Any? = deliverfile.name, - subtitle: [String: Any]? = deliverfile.subtitle, - keywords: [String: Any]? = deliverfile.keywords, - promotionalText: [String: Any]? = deliverfile.promotionalText, - releaseNotes: Any? = deliverfile.releaseNotes, - privacyUrl: Any? = deliverfile.privacyUrl, - appleTvPrivacyPolicy: Any? = deliverfile.appleTvPrivacyPolicy, - supportUrl: Any? = deliverfile.supportUrl, - marketingUrl: Any? = deliverfile.marketingUrl, - languages: [String]? = deliverfile.languages, - ignoreLanguageDirectoryValidation: Bool = deliverfile.ignoreLanguageDirectoryValidation, - precheckIncludeInAppPurchases: Bool = deliverfile.precheckIncludeInAppPurchases, - app: Any = deliverfile.app) { - let command = RubyCommand(commandID: "", methodName: "deliver", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "app_version", value: appVersion), - RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "pkg", value: pkg), - RubyCommand.Argument(name: "build_number", value: buildNumber), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "edit_live", value: editLive), - RubyCommand.Argument(name: "use_live_version", value: useLiveVersion), - RubyCommand.Argument(name: "metadata_path", value: metadataPath), - RubyCommand.Argument(name: "screenshots_path", value: screenshotsPath), - RubyCommand.Argument(name: "skip_binary_upload", value: skipBinaryUpload), - RubyCommand.Argument(name: "skip_screenshots", value: skipScreenshots), - RubyCommand.Argument(name: "skip_metadata", value: skipMetadata), - RubyCommand.Argument(name: "skip_app_version_update", value: skipAppVersionUpdate), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "overwrite_screenshots", value: overwriteScreenshots), - RubyCommand.Argument(name: "submit_for_review", value: submitForReview), - RubyCommand.Argument(name: "reject_if_possible", value: rejectIfPossible), - RubyCommand.Argument(name: "automatic_release", value: automaticRelease), - RubyCommand.Argument(name: "auto_release_date", value: autoReleaseDate), - RubyCommand.Argument(name: "phased_release", value: phasedRelease), - RubyCommand.Argument(name: "reset_ratings", value: resetRatings), - RubyCommand.Argument(name: "price_tier", value: priceTier), - RubyCommand.Argument(name: "app_rating_config_path", value: appRatingConfigPath), - RubyCommand.Argument(name: "submission_information", value: submissionInformation), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId), - RubyCommand.Argument(name: "dev_portal_team_name", value: devPortalTeamName), - RubyCommand.Argument(name: "itc_provider", value: itcProvider), - RubyCommand.Argument(name: "run_precheck_before_submit", value: runPrecheckBeforeSubmit), - RubyCommand.Argument(name: "precheck_default_rule_level", value: precheckDefaultRuleLevel), - RubyCommand.Argument(name: "individual_metadata_items", value: individualMetadataItems), - RubyCommand.Argument(name: "app_icon", value: appIcon), - RubyCommand.Argument(name: "apple_watch_app_icon", value: appleWatchAppIcon), - RubyCommand.Argument(name: "copyright", value: copyright), - RubyCommand.Argument(name: "primary_category", value: primaryCategory), - RubyCommand.Argument(name: "secondary_category", value: secondaryCategory), - RubyCommand.Argument(name: "primary_first_sub_category", value: primaryFirstSubCategory), - RubyCommand.Argument(name: "primary_second_sub_category", value: primarySecondSubCategory), - RubyCommand.Argument(name: "secondary_first_sub_category", value: secondaryFirstSubCategory), - RubyCommand.Argument(name: "secondary_second_sub_category", value: secondarySecondSubCategory), - RubyCommand.Argument(name: "trade_representative_contact_information", value: tradeRepresentativeContactInformation), - RubyCommand.Argument(name: "app_review_information", value: appReviewInformation), - RubyCommand.Argument(name: "app_review_attachment_file", value: appReviewAttachmentFile), - RubyCommand.Argument(name: "description", value: description), - RubyCommand.Argument(name: "name", value: name), - RubyCommand.Argument(name: "subtitle", value: subtitle), - RubyCommand.Argument(name: "keywords", value: keywords), - RubyCommand.Argument(name: "promotional_text", value: promotionalText), - RubyCommand.Argument(name: "release_notes", value: releaseNotes), - RubyCommand.Argument(name: "privacy_url", value: privacyUrl), - RubyCommand.Argument(name: "apple_tv_privacy_policy", value: appleTvPrivacyPolicy), - RubyCommand.Argument(name: "support_url", value: supportUrl), - RubyCommand.Argument(name: "marketing_url", value: marketingUrl), - RubyCommand.Argument(name: "languages", value: languages), - RubyCommand.Argument(name: "ignore_language_directory_validation", value: ignoreLanguageDirectoryValidation), - RubyCommand.Argument(name: "precheck_include_in_app_purchases", value: precheckIncludeInAppPurchases), - RubyCommand.Argument(name: "app", value: app)]) - _ = runner.executeCommand(command) -} - -/** - Upload a new build to [DeployGate](https://deploygate.com/) - - - parameters: - - apiToken: Deploygate API Token - - user: Target username or organization name - - ipa: Path to your IPA file. Optional if you use the _gym_ or _xcodebuild_ action - - apk: Path to your APK file - - message: Release Notes - - distributionKey: Target Distribution Key - - releaseNote: Release note for distribution page - - disableNotify: Disables Push notification emails - - distributionName: Target Distribution Name - - You can retrieve your username and API token on [your settings page](https://deploygate.com/settings). - More information about the available options can be found in the [DeployGate Push API document](https://deploygate.com/docs/api). - */ -func deploygate(apiToken: String, - user: String, - ipa: String? = nil, - apk: String? = nil, - message: String = "No changelog provided", - distributionKey: String? = nil, - releaseNote: String? = nil, - disableNotify: Bool = false, - distributionName: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "deploygate", className: nil, args: [RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "user", value: user), - RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "apk", value: apk), - RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "distribution_key", value: distributionKey), - RubyCommand.Argument(name: "release_note", value: releaseNote), - RubyCommand.Argument(name: "disable_notify", value: disableNotify), - RubyCommand.Argument(name: "distribution_name", value: distributionName)]) - _ = runner.executeCommand(command) -} - -/** - Reads in production secrets set in a dotgpg file and puts them in ENV - - - parameter dotgpgFile: Path to your gpg file - - More information about dotgpg can be found at [https://github.com/ConradIrwin/dotgpg](https://github.com/ConradIrwin/dotgpg). - */ -func dotgpgEnvironment(dotgpgFile: String) { - let command = RubyCommand(commandID: "", methodName: "dotgpg_environment", className: nil, args: [RubyCommand.Argument(name: "dotgpg_file", value: dotgpgFile)]) - _ = runner.executeCommand(command) -} - -/** - Download a file from a remote server (e.g. JSON file) - - - parameter url: The URL that should be downloaded - - Specify the URL to download and get the content as a return value. - Automatically parses JSON into a Ruby data structure. - For more advanced networking code, use the Ruby functions instead: [http://docs.ruby-lang.org/en/2.0.0/Net/HTTP.html](http://docs.ruby-lang.org/en/2.0.0/Net/HTTP.html). - */ -func download(url: String) { - let command = RubyCommand(commandID: "", methodName: "download", className: nil, args: [RubyCommand.Argument(name: "url", value: url)]) - _ = runner.executeCommand(command) -} - -/** - Download dSYM files from App Store Connect for Bitcode apps - - - parameters: - - username: Your Apple ID Username for App Store Connect - - appIdentifier: The bundle identifier of your app - - teamId: The ID of your App Store Connect team if you're in multiple teams - - teamName: The name of your App Store Connect team if you're in multiple teams - - platform: The app platform for dSYMs you wish to download (ios, appletvos) - - version: The app version for dSYMs you wish to download, pass in 'latest' to download only the latest build's dSYMs or 'live' to download only the live version dSYMs - - buildNumber: The app build_number for dSYMs you wish to download - - minVersion: The minimum app version for dSYMs you wish to download - - outputDirectory: Where to save the download dSYMs, defaults to the current path - - waitForDsymProcessing: Wait for dSYMs to process - - waitTimeout: Number of seconds to wait for dSYMs to process - - This action downloads dSYM files from App Store Connect after the ipa gets re-compiled by Apple. Useful if you have Bitcode enabled.| - | - ```ruby| - lane :refresh_dsyms do| - download_dsyms # Download dSYM files from iTC| - upload_symbols_to_crashlytics # Upload them to Crashlytics| - clean_build_artifacts # Delete the local dSYM files| - end| - ```| - >| - */ -func downloadDsyms(username: String, - appIdentifier: String, - teamId: Any? = nil, - teamName: String? = nil, - platform: String = "ios", - version: String? = nil, - buildNumber: String? = nil, - minVersion: String? = nil, - outputDirectory: String? = nil, - waitForDsymProcessing: Bool = false, - waitTimeout: Int = 300) { - let command = RubyCommand(commandID: "", methodName: "download_dsyms", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "version", value: version), - RubyCommand.Argument(name: "build_number", value: buildNumber), - RubyCommand.Argument(name: "min_version", value: minVersion), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "wait_for_dsym_processing", value: waitForDsymProcessing), - RubyCommand.Argument(name: "wait_timeout", value: waitTimeout)]) - _ = runner.executeCommand(command) -} - -/** - Download metadata and binaries from Google Play (via _supply_) - - - parameters: - - packageName: The package name of the application to use - - versionName: Version name (used when uploading new apks/aabs) - defaults to 'versionName' in build.gradle or AndroidManifest.xml - - track: The track of the application to use. The default available tracks are: production, beta, alpha, internal - - metadataPath: Path to the directory containing the metadata files - - key: **DEPRECATED!** Use `--json_key` instead - The p12 File used to authenticate with Google - - issuer: **DEPRECATED!** Use `--json_key` instead - The issuer of the p12 file (email address of the service account) - - jsonKey: The path to a file containing service account JSON, used to authenticate with Google - - jsonKeyData: The raw service account JSON data used to authenticate with Google - - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/ - - timeout: Timeout for read, open, and send (in seconds) - - More information: https://docs.fastlane.tools/actions/download_from_play_store/ - */ -func downloadFromPlayStore(packageName: String, - versionName: String? = nil, - track: String = "production", - metadataPath: String? = nil, - key: String? = nil, - issuer: String? = nil, - jsonKey: String? = nil, - jsonKeyData: String? = nil, - rootUrl: String? = nil, - timeout: Int = 300) { - let command = RubyCommand(commandID: "", methodName: "download_from_play_store", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName), - RubyCommand.Argument(name: "version_name", value: versionName), - RubyCommand.Argument(name: "track", value: track), - RubyCommand.Argument(name: "metadata_path", value: metadataPath), - RubyCommand.Argument(name: "key", value: key), - RubyCommand.Argument(name: "issuer", value: issuer), - RubyCommand.Argument(name: "json_key", value: jsonKey), - RubyCommand.Argument(name: "json_key_data", value: jsonKeyData), - RubyCommand.Argument(name: "root_url", value: rootUrl), - RubyCommand.Argument(name: "timeout", value: timeout)]) - _ = runner.executeCommand(command) -} - -/** - Creates a zipped dSYM in the project root from the .xcarchive - - - parameters: - - archivePath: Path to your xcarchive file. Optional if you use the `xcodebuild` action - - dsymPath: Path for generated dsym. Optional, default is your apps root directory - - all: Whether or not all dSYM files are to be included. Optional, default is false in which only your app dSYM is included - - You can manually specify the path to the xcarchive (not needed if you use `xcodebuild`/`xcarchive` to build your archive) - */ -func dsymZip(archivePath: String? = nil, - dsymPath: String? = nil, - all: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "dsym_zip", className: nil, args: [RubyCommand.Argument(name: "archive_path", value: archivePath), - RubyCommand.Argument(name: "dsym_path", value: dsymPath), - RubyCommand.Argument(name: "all", value: all)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `puts` action - - - parameter message: Message to be printed out - */ -func echo(message: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "echo", className: nil, args: [RubyCommand.Argument(name: "message", value: message)]) - _ = runner.executeCommand(command) -} - -/** - Raises an exception if not using `bundle exec` to run fastlane - - This action will check if you are using `bundle exec` to run fastlane. - You can put it into `before_all` to make sure that fastlane is ran using the `bundle exec fastlane` command. - */ -func ensureBundleExec() { - let command = RubyCommand(commandID: "", methodName: "ensure_bundle_exec", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Raises an exception if the specified env vars are not set - - - parameter envVars: The environment variables names that should be checked - - This action will check if some environment variables are set. - */ -func ensureEnvVars(envVars: [String]) { - let command = RubyCommand(commandID: "", methodName: "ensure_env_vars", className: nil, args: [RubyCommand.Argument(name: "env_vars", value: envVars)]) - _ = runner.executeCommand(command) -} - -/** - Raises an exception if not on a specific git branch - - - parameter branch: The branch that should be checked for. String that can be either the full name of the branch or a regex e.g. `^feature/.*$` to match - - This action will check if your git repo is checked out to a specific branch. - You may only want to make releases from a specific branch, so `ensure_git_branch` will stop a lane if it was accidentally executed on an incorrect branch. - */ -func ensureGitBranch(branch: String = "master") { - let command = RubyCommand(commandID: "", methodName: "ensure_git_branch", className: nil, args: [RubyCommand.Argument(name: "branch", value: branch)]) - _ = runner.executeCommand(command) -} - -/** - Raises an exception if there are uncommitted git changes - - - parameters: - - showUncommittedChanges: The flag whether to show uncommitted changes if the repo is dirty - - showDiff: The flag whether to show the git diff if the repo is dirty - - A sanity check to make sure you are working in a repo that is clean. - Especially useful to put at the beginning of your Fastfile in the `before_all` block, if some of your other actions will touch your filesystem, do things to your git repo, or just as a general reminder to save your work. - Also needed as a prerequisite for some other actions like `reset_git_repo`. - */ -func ensureGitStatusClean(showUncommittedChanges: Bool = false, - showDiff: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "ensure_git_status_clean", className: nil, args: [RubyCommand.Argument(name: "show_uncommitted_changes", value: showUncommittedChanges), - RubyCommand.Argument(name: "show_diff", value: showDiff)]) - _ = runner.executeCommand(command) -} - -/** - Ensures the given text is nowhere in the code base - - - parameters: - - text: The text that must not be in the code base - - path: The directory containing all the source files - - extension: The extension that should be searched for - - extensions: An array of file extensions that should be searched for - - exclude: Exclude a certain pattern from the search - - excludeDirs: An array of dirs that should not be included in the search - - You don't want any debug code to slip into production. - This can be used to check if there is any debug code still in your codebase or if you have things like `// TO DO` or similar. - */ -func ensureNoDebugCode(text: String, - path: String = ".", - extension: String? = nil, - extensions: Any? = nil, - exclude: String? = nil, - excludeDirs: [String]? = nil) { - let command = RubyCommand(commandID: "", methodName: "ensure_no_debug_code", className: nil, args: [RubyCommand.Argument(name: "text", value: text), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "extension", value: `extension`), - RubyCommand.Argument(name: "extensions", value: extensions), - RubyCommand.Argument(name: "exclude", value: exclude), - RubyCommand.Argument(name: "exclude_dirs", value: excludeDirs)]) - _ = runner.executeCommand(command) -} - -/** - Ensure the right version of Xcode is used - - - parameters: - - version: Xcode version to verify that is selected - - strict: Should the version be verified strictly (all 3 version numbers), or matching only the given version numbers (i.e. `11.3` == `11.3.x`) - - If building your app requires a specific version of Xcode, you can invoke this command before using gym. - For example, to ensure that a beta version of Xcode is not accidentally selected to build, which would make uploading to TestFlight fail. - You can either manually provide a specific version using `version: ` or you make use of the `.xcode-version` file. - Using the `strict` parameter, you can either verify the full set of version numbers strictly (i.e. `11.3.1`) or only a subset of them (i.e. `11.3` or `11`). - */ -func ensureXcodeVersion(version: String? = nil, - strict: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "ensure_xcode_version", className: nil, args: [RubyCommand.Argument(name: "version", value: version), - RubyCommand.Argument(name: "strict", value: strict)]) - _ = runner.executeCommand(command) -} - -/** - Sets/gets env vars for Fastlane.swift. Don't use in ruby, use `ENV[key] = val` - - - parameters: - - set: Set the environment variables named - - get: Get the environment variable named - - remove: Remove the environment variable named - */ -@discardableResult func environmentVariable(set: [String: Any]? = nil, - get: String? = nil, - remove: String? = nil) -> String { - let command = RubyCommand(commandID: "", methodName: "environment_variable", className: nil, args: [RubyCommand.Argument(name: "set", value: set), - RubyCommand.Argument(name: "get", value: get), - RubyCommand.Argument(name: "remove", value: remove)]) - return runner.executeCommand(command) -} - -/** - Allows to Generate output files based on ERB templates - - - parameters: - - template: ERB Template File - - destination: Destination file - - placeholders: Placeholders given as a hash - - Renders an ERB template with `:placeholders` given as a hash via parameter. - If no `:destination` is set, it returns the rendered template as string. - */ -func erb(template: String, - destination: String? = nil, - placeholders: [String: Any] = [:]) { - let command = RubyCommand(commandID: "", methodName: "erb", className: nil, args: [RubyCommand.Argument(name: "template", value: template), - RubyCommand.Argument(name: "destination", value: destination), - RubyCommand.Argument(name: "placeholders", value: placeholders)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `min_fastlane_version` action - - Add this to your `Fastfile` to require a certain version of _fastlane_. - Use it if you use an action that just recently came out and you need it. - */ -func fastlaneVersion() { - let command = RubyCommand(commandID: "", methodName: "fastlane_version", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Send a message to a [Flock](https://flock.com/) group - - - parameters: - - message: Message text - - token: Token for the Flock incoming webhook - - baseUrl: Base URL of the Flock incoming message webhook - - To obtain the token, create a new [incoming message webhook](https://dev.flock.co/wiki/display/FlockAPI/Incoming+Webhooks) in your Flock admin panel. - */ -func flock(message: String, - token: String, - baseUrl: String = "https://api.flock.co/hooks/sendMessage") { - let command = RubyCommand(commandID: "", methodName: "flock", className: nil, args: [RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "token", value: token), - RubyCommand.Argument(name: "base_url", value: baseUrl)]) - _ = runner.executeCommand(command) -} - -/** - Adds device frames around all screenshots (via _frameit_) - - - parameters: - - white: Use white device frames - - silver: Use white device frames. Alias for :white - - roseGold: Use rose gold device frames. Alias for :rose_gold - - gold: Use gold device frames. Alias for :gold - - forceDeviceType: Forces a given device type, useful for Mac screenshots, as their sizes vary - - useLegacyIphone5s: Use iPhone 5s instead of iPhone SE frames - - useLegacyIphone6s: Use iPhone 6s frames instead of iPhone 7 frames - - useLegacyIphone7: Use iPhone 7 frames instead of iPhone 8 frames - - useLegacyIphonex: Use iPhone X instead of iPhone XS frames - - useLegacyIphonexr: Use iPhone XR instead of iPhone 11 frames - - useLegacyIphonexs: Use iPhone XS instead of iPhone 11 Pro frames - - useLegacyIphonexsmax: Use iPhone XS Max instead of iPhone 11 Pro Max frames - - forceOrientationBlock: [Advanced] A block to customize your screenshots' device orientation - - debugMode: Output debug information in framed screenshots - - resume: Resume frameit instead of reprocessing all screenshots - - usePlatform: Choose a platform, the valid options are IOS, ANDROID and ANY (default is either general platform defined in the fastfile or IOS to ensure backward compatibility) - - path: The path to the directory containing the screenshots - - Uses [frameit](https://docs.fastlane.tools/actions/frameit/) to prepare perfect screenshots for the App Store, your website, QA or emails. - You can add background and titles to the framed screenshots as well. - */ -func frameScreenshots(white: Bool? = nil, - silver: Bool? = nil, - roseGold: Bool? = nil, - gold: Bool? = nil, - forceDeviceType: String? = nil, - useLegacyIphone5s: Bool = false, - useLegacyIphone6s: Bool = false, - useLegacyIphone7: Bool = false, - useLegacyIphonex: Bool = false, - useLegacyIphonexr: Bool = false, - useLegacyIphonexs: Bool = false, - useLegacyIphonexsmax: Bool = false, - forceOrientationBlock: ((String) -> Void)? = nil, - debugMode: Bool = false, - resume: Bool = false, - usePlatform: String = "IOS", - path: String = "./") { - let command = RubyCommand(commandID: "", methodName: "frame_screenshots", className: nil, args: [RubyCommand.Argument(name: "white", value: white), - RubyCommand.Argument(name: "silver", value: silver), - RubyCommand.Argument(name: "rose_gold", value: roseGold), - RubyCommand.Argument(name: "gold", value: gold), - RubyCommand.Argument(name: "force_device_type", value: forceDeviceType), - RubyCommand.Argument(name: "use_legacy_iphone5s", value: useLegacyIphone5s), - RubyCommand.Argument(name: "use_legacy_iphone6s", value: useLegacyIphone6s), - RubyCommand.Argument(name: "use_legacy_iphone7", value: useLegacyIphone7), - RubyCommand.Argument(name: "use_legacy_iphonex", value: useLegacyIphonex), - RubyCommand.Argument(name: "use_legacy_iphonexr", value: useLegacyIphonexr), - RubyCommand.Argument(name: "use_legacy_iphonexs", value: useLegacyIphonexs), - RubyCommand.Argument(name: "use_legacy_iphonexsmax", value: useLegacyIphonexsmax), - RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock, type: .stringClosure), - RubyCommand.Argument(name: "debug_mode", value: debugMode), - RubyCommand.Argument(name: "resume", value: resume), - RubyCommand.Argument(name: "use_platform", value: usePlatform), - RubyCommand.Argument(name: "path", value: path)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `frame_screenshots` action - - - parameters: - - white: Use white device frames - - silver: Use white device frames. Alias for :white - - roseGold: Use rose gold device frames. Alias for :rose_gold - - gold: Use gold device frames. Alias for :gold - - forceDeviceType: Forces a given device type, useful for Mac screenshots, as their sizes vary - - useLegacyIphone5s: Use iPhone 5s instead of iPhone SE frames - - useLegacyIphone6s: Use iPhone 6s frames instead of iPhone 7 frames - - useLegacyIphone7: Use iPhone 7 frames instead of iPhone 8 frames - - useLegacyIphonex: Use iPhone X instead of iPhone XS frames - - useLegacyIphonexr: Use iPhone XR instead of iPhone 11 frames - - useLegacyIphonexs: Use iPhone XS instead of iPhone 11 Pro frames - - useLegacyIphonexsmax: Use iPhone XS Max instead of iPhone 11 Pro Max frames - - forceOrientationBlock: [Advanced] A block to customize your screenshots' device orientation - - debugMode: Output debug information in framed screenshots - - resume: Resume frameit instead of reprocessing all screenshots - - usePlatform: Choose a platform, the valid options are IOS, ANDROID and ANY (default is either general platform defined in the fastfile or IOS to ensure backward compatibility) - - path: The path to the directory containing the screenshots - - Uses [frameit](https://docs.fastlane.tools/actions/frameit/) to prepare perfect screenshots for the App Store, your website, QA or emails. - You can add background and titles to the framed screenshots as well. - */ -func frameit(white: Bool? = nil, - silver: Bool? = nil, - roseGold: Bool? = nil, - gold: Bool? = nil, - forceDeviceType: String? = nil, - useLegacyIphone5s: Bool = false, - useLegacyIphone6s: Bool = false, - useLegacyIphone7: Bool = false, - useLegacyIphonex: Bool = false, - useLegacyIphonexr: Bool = false, - useLegacyIphonexs: Bool = false, - useLegacyIphonexsmax: Bool = false, - forceOrientationBlock: ((String) -> Void)? = nil, - debugMode: Bool = false, - resume: Bool = false, - usePlatform: String = "IOS", - path: String = "./") { - let command = RubyCommand(commandID: "", methodName: "frameit", className: nil, args: [RubyCommand.Argument(name: "white", value: white), - RubyCommand.Argument(name: "silver", value: silver), - RubyCommand.Argument(name: "rose_gold", value: roseGold), - RubyCommand.Argument(name: "gold", value: gold), - RubyCommand.Argument(name: "force_device_type", value: forceDeviceType), - RubyCommand.Argument(name: "use_legacy_iphone5s", value: useLegacyIphone5s), - RubyCommand.Argument(name: "use_legacy_iphone6s", value: useLegacyIphone6s), - RubyCommand.Argument(name: "use_legacy_iphone7", value: useLegacyIphone7), - RubyCommand.Argument(name: "use_legacy_iphonex", value: useLegacyIphonex), - RubyCommand.Argument(name: "use_legacy_iphonexr", value: useLegacyIphonexr), - RubyCommand.Argument(name: "use_legacy_iphonexs", value: useLegacyIphonexs), - RubyCommand.Argument(name: "use_legacy_iphonexsmax", value: useLegacyIphonexsmax), - RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock, type: .stringClosure), - RubyCommand.Argument(name: "debug_mode", value: debugMode), - RubyCommand.Argument(name: "resume", value: resume), - RubyCommand.Argument(name: "use_platform", value: usePlatform), - RubyCommand.Argument(name: "path", value: path)]) - _ = runner.executeCommand(command) -} - -/** - Runs test coverage reports for your Xcode project - - Generate summarized code coverage reports using [gcovr](http://gcovr.com/) - */ -func gcovr() { - let command = RubyCommand(commandID: "", methodName: "gcovr", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Get the build number of your project - - - parameters: - - xcodeproj: optional, you must specify the path to your main Xcode project if it is not in the project root directory - - hideErrorWhenVersioningDisabled: Used during `fastlane init` to hide the error message - - This action will return the current build number set on your project. - You first have to set up your Xcode project, if you haven't done it already: [https://developer.apple.com/library/ios/qa/qa1827/_index.html](https://developer.apple.com/library/ios/qa/qa1827/_index.html). - */ -@discardableResult func getBuildNumber(xcodeproj: String? = nil, - hideErrorWhenVersioningDisabled: Bool = false) -> String { - let command = RubyCommand(commandID: "", methodName: "get_build_number", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj), - RubyCommand.Argument(name: "hide_error_when_versioning_disabled", value: hideErrorWhenVersioningDisabled)]) - return runner.executeCommand(command) -} - -/** - Get the build number from the current repository - - - parameter useHgRevisionNumber: Use hg revision number instead of hash (ignored for non-hg repos) - - - returns: The build number from the current repository - - This action will get the **build number** according to what the SCM HEAD reports. - Currently supported SCMs are svn (uses root revision), git-svn (uses svn revision), git (uses short hash) and mercurial (uses short hash or revision number). - There is an option, `:use_hg_revision_number`, which allows to use mercurial revision number instead of hash. - */ -func getBuildNumberRepository(useHgRevisionNumber: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "get_build_number_repository", className: nil, args: [RubyCommand.Argument(name: "use_hg_revision_number", value: useHgRevisionNumber)]) - _ = runner.executeCommand(command) -} - -/** - Create new iOS code signing certificates (via _cert_) - - - parameters: - - development: Create a development certificate instead of a distribution one - - type: Create specific certificate type (takes precedence over :development) - - force: Create a certificate even if an existing certificate exists - - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution) - - username: Your Apple ID Username - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - filename: The filename of certificate to store - - outputPath: The path to a directory in which all certificates and private keys should be stored - - keychainPath: Path to a custom keychain - - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password - - platform: Set the provisioning profile's platform (ios, macos) - - **Important**: It is recommended to use [match](https://docs.fastlane.tools/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your certificates. Use _cert_ directly only if you want full control over what's going on and know more about codesigning. - Use this action to download the latest code signing identity. - */ -func getCertificates(development: Bool = false, - type: String? = nil, - force: Bool = false, - generateAppleCerts: Bool = true, - username: String, - teamId: String? = nil, - teamName: String? = nil, - filename: String? = nil, - outputPath: String = ".", - keychainPath: String, - keychainPassword: String? = nil, - platform: String = "ios") { - let command = RubyCommand(commandID: "", methodName: "get_certificates", className: nil, args: [RubyCommand.Argument(name: "development", value: development), - RubyCommand.Argument(name: "type", value: type), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "filename", value: filename), - RubyCommand.Argument(name: "output_path", value: outputPath), - RubyCommand.Argument(name: "keychain_path", value: keychainPath), - RubyCommand.Argument(name: "keychain_password", value: keychainPassword), - RubyCommand.Argument(name: "platform", value: platform)]) - _ = runner.executeCommand(command) -} - -/** - This will verify if a given release version is available on GitHub - - - parameters: - - url: The path to your repo, e.g. 'KrauseFx/fastlane' - - serverUrl: The server url. e.g. 'https://your.github.server/api/v3' (Default: 'https://api.github.com') - - version: The version tag of the release to check - - apiToken: GitHub Personal Token (required for private repositories) - - This will return all information about a release. For example:| - | - ```no-highlight| - {| - "url"=>"https://api.github.com/repos/KrauseFx/fastlane/releases/1537713",| - "assets_url"=>"https://api.github.com/repos/KrauseFx/fastlane/releases/1537713/assets",| - "upload_url"=>"https://uploads.github.com/repos/KrauseFx/fastlane/releases/1537713/assets{?name}",| - "html_url"=>"https://github.com/fastlane/fastlane/releases/tag/1.8.0",| - "id"=>1537713,| - "tag_name"=>"1.8.0",| - "target_commitish"=>"master",| - "name"=>"1.8.0 Switch Lanes & Pass Parameters",| - "draft"=>false,| - "author"=>| - {"login"=>"KrauseFx",| - "id"=>869950,| - "avatar_url"=>"https://avatars.githubusercontent.com/u/869950?v=3",| - "gravatar_id"=>"",| - "url"=>"https://api.github.com/users/KrauseFx",| - "html_url"=>"https://github.com/fastlane",| - "followers_url"=>"https://api.github.com/users/KrauseFx/followers",| - "following_url"=>"https://api.github.com/users/KrauseFx/following{/other_user}",| - "gists_url"=>"https://api.github.com/users/KrauseFx/gists{/gist_id}",| - "starred_url"=>"https://api.github.com/users/KrauseFx/starred{/owner}{/repo}",| - "subscriptions_url"=>"https://api.github.com/users/KrauseFx/subscriptions",| - "organizations_url"=>"https://api.github.com/users/KrauseFx/orgs",| - "repos_url"=>"https://api.github.com/users/KrauseFx/repos",| - "events_url"=>"https://api.github.com/users/KrauseFx/events{/privacy}",| - "received_events_url"=>"https://api.github.com/users/KrauseFx/received_events",| - "type"=>"User",| - "site_admin"=>false},| - "prerelease"=>false,| - "created_at"=>"2015-07-14T23:33:01Z",| - "published_at"=>"2015-07-14T23:44:10Z",| - "assets"=>[],| - "tarball_url"=>"https://api.github.com/repos/KrauseFx/fastlane/tarball/1.8.0",| - "zipball_url"=>"https://api.github.com/repos/KrauseFx/fastlane/zipball/1.8.0",| - "body"=> ...Markdown...| - "This is one of the biggest updates of _fastlane_ yet"| - }| - ```| - >| - */ -func getGithubRelease(url: String, - serverUrl: String = "https://api.github.com", - version: String, - apiToken: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "get_github_release", className: nil, args: [RubyCommand.Argument(name: "url", value: url), - RubyCommand.Argument(name: "server_url", value: serverUrl), - RubyCommand.Argument(name: "version", value: version), - RubyCommand.Argument(name: "api_token", value: apiToken)]) - _ = runner.executeCommand(command) -} - -/** - Returns value from Info.plist of your project as native Ruby data structures - - - parameters: - - key: Name of parameter - - path: Path to plist file you want to read - - Get a value from a plist file, which can be used to fetch the app identifier and more information about your app - */ -@discardableResult func getInfoPlistValue(key: String, - path: String) -> String { - let command = RubyCommand(commandID: "", methodName: "get_info_plist_value", className: nil, args: [RubyCommand.Argument(name: "key", value: key), - RubyCommand.Argument(name: "path", value: path)]) - return runner.executeCommand(command) -} - -/** - Returns a value from Info.plist inside a .ipa file - - - parameters: - - key: Name of parameter - - ipa: Path to IPA - - - returns: Returns the value in the .ipa's Info.plist corresponding to the passed in Key - - This is useful for introspecting Info.plist files for `.ipa` files that have already been built. - */ -@discardableResult func getIpaInfoPlistValue(key: String, - ipa: String) -> String { - let command = RubyCommand(commandID: "", methodName: "get_ipa_info_plist_value", className: nil, args: [RubyCommand.Argument(name: "key", value: key), - RubyCommand.Argument(name: "ipa", value: ipa)]) - return runner.executeCommand(command) -} - -/** - Obtain publishing rights for custom apps on Managed Google Play Store - - - parameters: - - jsonKey: The path to a file containing service account JSON, used to authenticate with Google - - jsonKeyData: The raw service account JSON data used to authenticate with Google - - - returns: An URI to obtain publishing rights for custom apps on Managed Play Store - - If you haven't done so before, start by following the first two steps of Googles ["Get started with custom app publishing"](https://developers.google.com/android/work/play/custom-app-api/get-started) -> ["Preliminary setup"](https://developers.google.com/android/work/play/custom-app-api/get-started#preliminary_setup) instructions: - "[Enable the Google Play Custom App Publishing API](https://developers.google.com/android/work/play/custom-app-api/get-started#enable_the_google_play_custom_app_publishing_api)" and "[Create a service account](https://developers.google.com/android/work/play/custom-app-api/get-started#create_a_service_account)". - You need the "service account's private key file" to continue. - Run the action and supply the "private key file" to it as the `json_key` parameter. The command will output a URL to visit. After logging in you are redirected to a page that outputs your "Developer Account ID" - take note of that, you will need it to be able to use [`create_app_on_managed_play_store`](https://docs.fastlane.tools/actions/create_app_on_managed_play_store/). - */ -func getManagedPlayStorePublishingRights(jsonKey: String? = nil, - jsonKeyData: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "get_managed_play_store_publishing_rights", className: nil, args: [RubyCommand.Argument(name: "json_key", value: jsonKey), - RubyCommand.Argument(name: "json_key_data", value: jsonKeyData)]) - _ = runner.executeCommand(command) -} - -/** - Generates a provisioning profile, saving it in the current folder (via _sigh_) - - - parameters: - - adhoc: Setting this flag will generate AdHoc profiles instead of App Store Profiles - - developerId: Setting this flag will generate Developer ID profiles instead of App Store Profiles - - development: Renew the development certificate instead of the production one - - skipInstall: By default, the certificate will be added to your local machine. Setting this flag will skip this action - - force: Renew provisioning profiles regardless of its state - to automatically add all devices for ad hoc profiles - - appIdentifier: The bundle identifier of your app - - username: Your Apple ID Username - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - provisioningName: The name of the profile that is used on the Apple Developer Portal - - ignoreProfilesWithDifferentName: Use in combination with :provisioning_name - when true only profiles matching this exact name will be downloaded - - outputPath: Directory in which the profile should be stored - - certId: The ID of the code signing certificate to use (e.g. 78ADL6LVAA) - - certOwnerName: The certificate name to use for new profiles, or to renew with. (e.g. "Felix Krause") - - filename: Filename to use for the generated provisioning profile (must include .mobileprovision) - - skipFetchProfiles: Skips the verification of existing profiles which is useful if you have thousands of profiles - - skipCertificateVerification: Skips the verification of the certificates for every existing profiles. This will make sure the provisioning profile can be used on the local machine - - platform: Set the provisioning profile's platform (i.e. ios, tvos) - - readonly: Only fetch existing profile, don't generate new ones - - templateName: The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. "Apple Pay Pass Suppression Development") - - failOnNameTaken: Should the command fail if it was about to create a duplicate of an existing provisioning profile. It can happen due to issues on Apple Developer Portal, when profile to be recreated was not properly deleted first - - - returns: The UUID of the profile sigh just fetched/generated - - **Note**: It is recommended to use [match](https://docs.fastlane.tools/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your provisioning profiles. Use _sigh_ directly only if you want full control over what's going on and know more about codesigning. - */ -func getProvisioningProfile(adhoc: Bool = false, - developerId: Bool = false, - development: Bool = false, - skipInstall: Bool = false, - force: Bool = false, - appIdentifier: String, - username: String, - teamId: String? = nil, - teamName: String? = nil, - provisioningName: String? = nil, - ignoreProfilesWithDifferentName: Bool = false, - outputPath: String = ".", - certId: String? = nil, - certOwnerName: String? = nil, - filename: String? = nil, - skipFetchProfiles: Bool = false, - skipCertificateVerification: Bool = false, - platform: Any = "ios", - readonly: Bool = false, - templateName: String? = nil, - failOnNameTaken: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "get_provisioning_profile", className: nil, args: [RubyCommand.Argument(name: "adhoc", value: adhoc), - RubyCommand.Argument(name: "developer_id", value: developerId), - RubyCommand.Argument(name: "development", value: development), - RubyCommand.Argument(name: "skip_install", value: skipInstall), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "provisioning_name", value: provisioningName), - RubyCommand.Argument(name: "ignore_profiles_with_different_name", value: ignoreProfilesWithDifferentName), - RubyCommand.Argument(name: "output_path", value: outputPath), - RubyCommand.Argument(name: "cert_id", value: certId), - RubyCommand.Argument(name: "cert_owner_name", value: certOwnerName), - RubyCommand.Argument(name: "filename", value: filename), - RubyCommand.Argument(name: "skip_fetch_profiles", value: skipFetchProfiles), - RubyCommand.Argument(name: "skip_certificate_verification", value: skipCertificateVerification), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "readonly", value: readonly), - RubyCommand.Argument(name: "template_name", value: templateName), - RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken)]) - _ = runner.executeCommand(command) -} - -/** - Ensure a valid push profile is active, creating a new one if needed (via _pem_) - - - parameters: - - development: Renew the development push certificate instead of the production one - - websitePush: Create a Website Push certificate - - generateP12: Generate a p12 file additionally to a PEM file - - activeDaysLimit: If the current certificate is active for less than this number of days, generate a new one - - force: Create a new push certificate, even if the current one is active for 30 (or PEM_ACTIVE_DAYS_LIMIT) more days - - savePrivateKey: Set to save the private RSA key - - appIdentifier: The bundle identifier of your app - - username: Your Apple ID Username - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - p12Password: The password that is used for your p12 file - - pemName: The file name of the generated .pem file - - outputPath: The path to a directory in which all certificates and private keys should be stored - - newProfile: Block that is called if there is a new profile - - Additionally to the available options, you can also specify a block that only gets executed if a new profile was created. You can use it to upload the new profile to your server. - Use it like this:| - | - ```ruby| - get_push_certificate(| - new_profile: proc do| - # your upload code| - end| - )| - ```| - >| - */ -func getPushCertificate(development: Bool = false, - websitePush: Bool = false, - generateP12: Bool = true, - activeDaysLimit: Int = 30, - force: Bool = false, - savePrivateKey: Bool = true, - appIdentifier: String, - username: String, - teamId: String? = nil, - teamName: String? = nil, - p12Password: String, - pemName: String? = nil, - outputPath: String = ".", - newProfile: Any? = nil) { - let command = RubyCommand(commandID: "", methodName: "get_push_certificate", className: nil, args: [RubyCommand.Argument(name: "development", value: development), - RubyCommand.Argument(name: "website_push", value: websitePush), - RubyCommand.Argument(name: "generate_p12", value: generateP12), - RubyCommand.Argument(name: "active_days_limit", value: activeDaysLimit), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "save_private_key", value: savePrivateKey), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "p12_password", value: p12Password), - RubyCommand.Argument(name: "pem_name", value: pemName), - RubyCommand.Argument(name: "output_path", value: outputPath), - RubyCommand.Argument(name: "new_profile", value: newProfile)]) - _ = runner.executeCommand(command) -} - -/** - Get the version number of your project - - - parameters: - - xcodeproj: Path to the main Xcode project to read version number from, optional. By default will use the first Xcode project found within the project root directory - - target: Target name, optional. Will be needed if you have more than one non-test target to avoid being prompted to select one - - configuration: Configuration name, optional. Will be needed if you have altered the configurations from the default or your version number depends on the configuration selected - - This action will return the current version number set on your project. - */ -@discardableResult func getVersionNumber(xcodeproj: String? = nil, - target: String? = nil, - configuration: String? = nil) -> String { - let command = RubyCommand(commandID: "", methodName: "get_version_number", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj), - RubyCommand.Argument(name: "target", value: target), - RubyCommand.Argument(name: "configuration", value: configuration)]) - return runner.executeCommand(command) -} - -/** - Directly add the given file or all files - - - parameters: - - path: The file(s) and path(s) you want to add - - shellEscape: Shell escapes paths (set to false if using wildcards or manually escaping spaces in :path) - - pathspec: **DEPRECATED!** Use `--path` instead - The pathspec you want to add files from - */ -func gitAdd(path: Any? = nil, - shellEscape: Bool = true, - pathspec: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "git_add", className: nil, args: [RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "shell_escape", value: shellEscape), - RubyCommand.Argument(name: "pathspec", value: pathspec)]) - _ = runner.executeCommand(command) -} - -/** - Returns the name of the current git branch, possibly as managed by CI ENV vars - - If no branch could be found, this action will return an empty string - */ -@discardableResult func gitBranch() -> String { - let command = RubyCommand(commandID: "", methodName: "git_branch", className: nil, args: []) - return runner.executeCommand(command) -} - -/** - Directly commit the given file with the given message - - - parameters: - - path: The file you want to commit - - message: The commit message that should be used - - skipGitHooks: Set to true to pass --no-verify to git - - allowNothingToCommit: Set to true to allow commit without any git changes - */ -func gitCommit(path: Any, - message: String, - skipGitHooks: Bool? = nil, - allowNothingToCommit: Bool? = nil) { - let command = RubyCommand(commandID: "", methodName: "git_commit", className: nil, args: [RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "skip_git_hooks", value: skipGitHooks), - RubyCommand.Argument(name: "allow_nothing_to_commit", value: allowNothingToCommit)]) - _ = runner.executeCommand(command) -} - -/** - Executes a simple git pull command - - - parameter onlyTags: Simply pull the tags, and not bring new commits to the current branch from the remote - */ -func gitPull(onlyTags: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "git_pull", className: nil, args: [RubyCommand.Argument(name: "only_tags", value: onlyTags)]) - _ = runner.executeCommand(command) -} - -/** - Executes a git submodule command - - - parameters: - - recursive: Should the submodules be updated recursively - - init: Should the submodules be initiated before update - */ -func gitSubmoduleUpdate(recursive: Bool = false, - init: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "git_submodule_update", className: nil, args: [RubyCommand.Argument(name: "recursive", value: recursive), - RubyCommand.Argument(name: "init", value: `init`)]) - _ = runner.executeCommand(command) -} - -/** - Checks if the git tag with the given name exists in the current repo - - - parameters: - - tag: The tag name that should be checked - - remote: Whether to check remote. Defaults to `false` - - remoteName: The remote to check. Defaults to `origin` - - - returns: Boolean value whether the tag exists or not - */ -func gitTagExists(tag: String, - remote: Bool = false, - remoteName: String = "origin") { - let command = RubyCommand(commandID: "", methodName: "git_tag_exists", className: nil, args: [RubyCommand.Argument(name: "tag", value: tag), - RubyCommand.Argument(name: "remote", value: remote), - RubyCommand.Argument(name: "remote_name", value: remoteName)]) - _ = runner.executeCommand(command) -} - -/** - Call a GitHub API endpoint and get the resulting JSON response - - - parameters: - - serverUrl: The server url. e.g. 'https://your.internal.github.host/api/v3' (Default: 'https://api.github.com') - - apiToken: Personal API Token for GitHub - generate one at https://github.com/settings/tokens - - httpMethod: The HTTP method. e.g. GET / POST - - body: The request body in JSON or hash format - - rawBody: The request body taken verbatim instead of as JSON, useful for file uploads - - path: The endpoint path. e.g. '/repos/:owner/:repo/readme' - - url: The complete full url - used instead of path. e.g. 'https://uploads.github.com/repos/fastlane...' - - errorHandlers: Optional error handling hash based on status code, or pass '*' to handle all errors - - headers: Optional headers to apply - - secure: Optionally disable secure requests (ssl_verify_peer) - - - returns: A hash including the HTTP status code (:status), the response body (:body), and if valid JSON has been returned the parsed JSON (:json). - - Calls any GitHub API endpoint. You must provide your GitHub Personal token (get one from [https://github.com/settings/tokens/new](https://github.com/settings/tokens/new)). - Out parameters provide the status code and the full response JSON if valid, otherwise the raw response body. - Documentation: [https://developer.github.com/v3](https://developer.github.com/v3). - */ -func githubApi(serverUrl: String = "https://api.github.com", - apiToken: String, - httpMethod: String = "GET", - body: [String: Any] = [:], - rawBody: String? = nil, - path: String? = nil, - url: String? = nil, - errorHandlers: [String: Any] = [:], - headers: [String: Any] = [:], - secure: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "github_api", className: nil, args: [RubyCommand.Argument(name: "server_url", value: serverUrl), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "http_method", value: httpMethod), - RubyCommand.Argument(name: "body", value: body), - RubyCommand.Argument(name: "raw_body", value: rawBody), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "url", value: url), - RubyCommand.Argument(name: "error_handlers", value: errorHandlers), - RubyCommand.Argument(name: "headers", value: headers), - RubyCommand.Argument(name: "secure", value: secure)]) - _ = runner.executeCommand(command) -} - -/** - Retrieves release names for a Google Play track - - - parameters: - - packageName: The package name of the application to use - - track: The track of the application to use. The default available tracks are: production, beta, alpha, internal - - key: **DEPRECATED!** Use `--json_key` instead - The p12 File used to authenticate with Google - - issuer: **DEPRECATED!** Use `--json_key` instead - The issuer of the p12 file (email address of the service account) - - jsonKey: The path to a file containing service account JSON, used to authenticate with Google - - jsonKeyData: The raw service account JSON data used to authenticate with Google - - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/ - - timeout: Timeout for read, open, and send (in seconds) - - - returns: Array of strings representing the release names for the given Google Play track - - More information: [https://docs.fastlane.tools/actions/supply/](https://docs.fastlane.tools/actions/supply/) - */ -func googlePlayTrackReleaseNames(packageName: String, - track: String = "production", - key: String? = nil, - issuer: String? = nil, - jsonKey: String? = nil, - jsonKeyData: String? = nil, - rootUrl: String? = nil, - timeout: Int = 300) { - let command = RubyCommand(commandID: "", methodName: "google_play_track_release_names", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName), - RubyCommand.Argument(name: "track", value: track), - RubyCommand.Argument(name: "key", value: key), - RubyCommand.Argument(name: "issuer", value: issuer), - RubyCommand.Argument(name: "json_key", value: jsonKey), - RubyCommand.Argument(name: "json_key_data", value: jsonKeyData), - RubyCommand.Argument(name: "root_url", value: rootUrl), - RubyCommand.Argument(name: "timeout", value: timeout)]) - _ = runner.executeCommand(command) -} - -/** - Retrieves version codes for a Google Play track - - - parameters: - - packageName: The package name of the application to use - - track: The track of the application to use. The default available tracks are: production, beta, alpha, internal - - key: **DEPRECATED!** Use `--json_key` instead - The p12 File used to authenticate with Google - - issuer: **DEPRECATED!** Use `--json_key` instead - The issuer of the p12 file (email address of the service account) - - jsonKey: The path to a file containing service account JSON, used to authenticate with Google - - jsonKeyData: The raw service account JSON data used to authenticate with Google - - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/ - - timeout: Timeout for read, open, and send (in seconds) - - - returns: Array of integers representing the version codes for the given Google Play track - - More information: [https://docs.fastlane.tools/actions/supply/](https://docs.fastlane.tools/actions/supply/) - */ -func googlePlayTrackVersionCodes(packageName: String, - track: String = "production", - key: String? = nil, - issuer: String? = nil, - jsonKey: String? = nil, - jsonKeyData: String? = nil, - rootUrl: String? = nil, - timeout: Int = 300) { - let command = RubyCommand(commandID: "", methodName: "google_play_track_version_codes", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName), - RubyCommand.Argument(name: "track", value: track), - RubyCommand.Argument(name: "key", value: key), - RubyCommand.Argument(name: "issuer", value: issuer), - RubyCommand.Argument(name: "json_key", value: jsonKey), - RubyCommand.Argument(name: "json_key_data", value: jsonKeyData), - RubyCommand.Argument(name: "root_url", value: rootUrl), - RubyCommand.Argument(name: "timeout", value: timeout)]) - _ = runner.executeCommand(command) -} - -/** - All gradle related actions, including building and testing your Android app - - - parameters: - - task: The gradle task you want to execute, e.g. `assemble`, `bundle` or `test`. For tasks such as `assembleMyFlavorRelease` you should use gradle(task: 'assemble', flavor: 'Myflavor', build_type: 'Release') - - flavor: The flavor that you want the task for, e.g. `MyFlavor`. If you are running the `assemble` task in a multi-flavor project, and you rely on Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] then you must specify a flavor here or else this value will be undefined - - buildType: The build type that you want the task for, e.g. `Release`. Useful for some tasks such as `assemble` - - tasks: The multiple gradle tasks that you want to execute, e.g. `[assembleDebug, bundleDebug]` - - flags: All parameter flags you want to pass to the gradle command, e.g. `--exitcode --xml file.xml` - - projectDir: The root directory of the gradle project - - gradlePath: The path to your `gradlew`. If you specify a relative path, it is assumed to be relative to the `project_dir` - - properties: Gradle properties to be exposed to the gradle script - - systemProperties: Gradle system properties to be exposed to the gradle script - - serial: Android serial, which device should be used for this command - - printCommand: Control whether the generated Gradle command is printed as output before running it (true/false) - - printCommandOutput: Control whether the output produced by given Gradle command is printed while running (true/false) - - - returns: The output of running the gradle task - - Run `./gradlew tasks` to get a list of all available gradle tasks for your project - */ -func gradle(task: String? = nil, - flavor: String? = nil, - buildType: String? = nil, - tasks: [String]? = nil, - flags: String? = nil, - projectDir: String = ".", - gradlePath: String? = nil, - properties: Any? = nil, - systemProperties: Any? = nil, - serial: String = "", - printCommand: Bool = true, - printCommandOutput: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "gradle", className: nil, args: [RubyCommand.Argument(name: "task", value: task), - RubyCommand.Argument(name: "flavor", value: flavor), - RubyCommand.Argument(name: "build_type", value: buildType), - RubyCommand.Argument(name: "tasks", value: tasks), - RubyCommand.Argument(name: "flags", value: flags), - RubyCommand.Argument(name: "project_dir", value: projectDir), - RubyCommand.Argument(name: "gradle_path", value: gradlePath), - RubyCommand.Argument(name: "properties", value: properties), - RubyCommand.Argument(name: "system_properties", value: systemProperties), - RubyCommand.Argument(name: "serial", value: serial), - RubyCommand.Argument(name: "print_command", value: printCommand), - RubyCommand.Argument(name: "print_command_output", value: printCommandOutput)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `build_app` action - - - parameters: - - workspace: Path to the workspace file - - project: Path to the project file - - scheme: The project's scheme. Make sure it's marked as `Shared` - - clean: Should the project be cleaned before building it? - - outputDirectory: The directory in which the ipa file should be stored in - - outputName: The name of the resulting ipa file - - configuration: The configuration to use when building the app. Defaults to 'Release' - - silent: Hide all information that's not necessary while building - - codesigningIdentity: The name of the code signing identity to use. It has to match the name exactly. e.g. 'iPhone Distribution: SunApps GmbH' - - skipPackageIpa: Should we skip packaging the ipa? - - skipPackagePkg: Should we skip packaging the pkg? - - includeSymbols: Should the ipa file include symbols? - - includeBitcode: Should the ipa file include bitcode? - - exportMethod: Method used to export the archive. Valid values are: app-store, ad-hoc, package, enterprise, development, developer-id - - exportOptions: Path to an export options plist or a hash with export options. Use 'xcodebuild -help' to print the full set of available options - - exportXcargs: Pass additional arguments to xcodebuild for the package phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - skipBuildArchive: Export ipa from previously built xcarchive. Uses archive_path as source - - skipArchive: After building, don't archive, effectively not including -archivePath param - - skipCodesigning: Build without codesigning - - catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos - - installerCertName: Full name of 3rd Party Mac Developer Installer or Developer ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)` - - buildPath: The directory in which the archive should be stored in - - archivePath: The path to the created archive - - derivedDataPath: The directory where built products and other derived data will go - - resultBundle: Should an Xcode result bundle be generated in the output directory - - resultBundlePath: Path to the result bundle directory to create. Ignored if `result_bundle` if false - - buildlogPath: The directory where to store the build log - - sdk: The SDK that should be used for building the application - - toolchain: The toolchain that should be used for building the application (e.g. com.apple.dt.toolchain.Swift_2_3, org.swift.30p620160816a) - - destination: Use a custom destination for building the app - - exportTeamId: Optional: Sometimes you need to specify a team id when exporting the ipa file - - xcargs: Pass additional arguments to xcodebuild for the build phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - xcconfig: Use an extra XCCONFIG file to build your app - - suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path - - disableXcpretty: Disable xcpretty formatting of build output - - xcprettyTestFormat: Use the test (RSpec style) format for build output - - xcprettyFormatter: A custom xcpretty formatter to use - - xcprettyReportJunit: Have xcpretty create a JUnit-style XML report at the provided path - - xcprettyReportHtml: Have xcpretty create a simple HTML report at the provided path - - xcprettyReportJson: Have xcpretty create a JSON compilation database at the provided path - - analyzeBuildTime: Analyze the project build time and store the output in 'culprits.txt' file - - xcprettyUtf: Have xcpretty use unicode encoding when reporting builds - - skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used - - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies - - - returns: The absolute path to the generated ipa file - - More information: https://fastlane.tools/gym - */ -func gym(workspace: Any? = gymfile.workspace, - project: Any? = gymfile.project, - scheme: Any? = gymfile.scheme, - clean: Bool = gymfile.clean, - outputDirectory: Any = gymfile.outputDirectory, - outputName: Any? = gymfile.outputName, - configuration: Any? = gymfile.configuration, - silent: Bool = gymfile.silent, - codesigningIdentity: Any? = gymfile.codesigningIdentity, - skipPackageIpa: Bool = gymfile.skipPackageIpa, - skipPackagePkg: Bool = gymfile.skipPackagePkg, - includeSymbols: Bool? = gymfile.includeSymbols, - includeBitcode: Bool? = gymfile.includeBitcode, - exportMethod: Any? = gymfile.exportMethod, - exportOptions: [String: Any]? = gymfile.exportOptions, - exportXcargs: Any? = gymfile.exportXcargs, - skipBuildArchive: Bool? = gymfile.skipBuildArchive, - skipArchive: Bool? = gymfile.skipArchive, - skipCodesigning: Bool? = gymfile.skipCodesigning, - catalystPlatform: Any? = gymfile.catalystPlatform, - installerCertName: Any? = gymfile.installerCertName, - buildPath: Any? = gymfile.buildPath, - archivePath: Any? = gymfile.archivePath, - derivedDataPath: Any? = gymfile.derivedDataPath, - resultBundle: Bool = gymfile.resultBundle, - resultBundlePath: Any? = gymfile.resultBundlePath, - buildlogPath: Any = gymfile.buildlogPath, - sdk: Any? = gymfile.sdk, - toolchain: Any? = gymfile.toolchain, - destination: Any? = gymfile.destination, - exportTeamId: Any? = gymfile.exportTeamId, - xcargs: Any? = gymfile.xcargs, - xcconfig: Any? = gymfile.xcconfig, - suppressXcodeOutput: Bool? = gymfile.suppressXcodeOutput, - disableXcpretty: Bool? = gymfile.disableXcpretty, - xcprettyTestFormat: Bool? = gymfile.xcprettyTestFormat, - xcprettyFormatter: Any? = gymfile.xcprettyFormatter, - xcprettyReportJunit: Any? = gymfile.xcprettyReportJunit, - xcprettyReportHtml: Any? = gymfile.xcprettyReportHtml, - xcprettyReportJson: Any? = gymfile.xcprettyReportJson, - analyzeBuildTime: Bool? = gymfile.analyzeBuildTime, - xcprettyUtf: Bool? = gymfile.xcprettyUtf, - skipProfileDetection: Bool = gymfile.skipProfileDetection, - clonedSourcePackagesPath: Any? = gymfile.clonedSourcePackagesPath) { - let command = RubyCommand(commandID: "", methodName: "gym", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "project", value: project), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "output_name", value: outputName), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "silent", value: silent), - RubyCommand.Argument(name: "codesigning_identity", value: codesigningIdentity), - RubyCommand.Argument(name: "skip_package_ipa", value: skipPackageIpa), - RubyCommand.Argument(name: "skip_package_pkg", value: skipPackagePkg), - RubyCommand.Argument(name: "include_symbols", value: includeSymbols), - RubyCommand.Argument(name: "include_bitcode", value: includeBitcode), - RubyCommand.Argument(name: "export_method", value: exportMethod), - RubyCommand.Argument(name: "export_options", value: exportOptions), - RubyCommand.Argument(name: "export_xcargs", value: exportXcargs), - RubyCommand.Argument(name: "skip_build_archive", value: skipBuildArchive), - RubyCommand.Argument(name: "skip_archive", value: skipArchive), - RubyCommand.Argument(name: "skip_codesigning", value: skipCodesigning), - RubyCommand.Argument(name: "catalyst_platform", value: catalystPlatform), - RubyCommand.Argument(name: "installer_cert_name", value: installerCertName), - RubyCommand.Argument(name: "build_path", value: buildPath), - RubyCommand.Argument(name: "archive_path", value: archivePath), - RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath), - RubyCommand.Argument(name: "result_bundle", value: resultBundle), - RubyCommand.Argument(name: "result_bundle_path", value: resultBundlePath), - RubyCommand.Argument(name: "buildlog_path", value: buildlogPath), - RubyCommand.Argument(name: "sdk", value: sdk), - RubyCommand.Argument(name: "toolchain", value: toolchain), - RubyCommand.Argument(name: "destination", value: destination), - RubyCommand.Argument(name: "export_team_id", value: exportTeamId), - RubyCommand.Argument(name: "xcargs", value: xcargs), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput), - RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty), - RubyCommand.Argument(name: "xcpretty_test_format", value: xcprettyTestFormat), - RubyCommand.Argument(name: "xcpretty_formatter", value: xcprettyFormatter), - RubyCommand.Argument(name: "xcpretty_report_junit", value: xcprettyReportJunit), - RubyCommand.Argument(name: "xcpretty_report_html", value: xcprettyReportHtml), - RubyCommand.Argument(name: "xcpretty_report_json", value: xcprettyReportJson), - RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime), - RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf), - RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection), - RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)]) - _ = runner.executeCommand(command) -} - -/** - This will add a hg tag to the current branch - - - parameter tag: Tag to create - */ -func hgAddTag(tag: String) { - let command = RubyCommand(commandID: "", methodName: "hg_add_tag", className: nil, args: [RubyCommand.Argument(name: "tag", value: tag)]) - _ = runner.executeCommand(command) -} - -/** - This will commit a version bump to the hg repo - - - parameters: - - message: The commit message when committing the version bump - - xcodeproj: The path to your project file (Not the workspace). If you have only one, this is optional - - force: Forces the commit, even if other files than the ones containing the version number have been modified - - testDirtyFiles: A list of dirty files passed in for testing - - testExpectedFiles: A list of expected changed files passed in for testing - - The mercurial equivalent of the [commit_version_bump](https://docs.fastlane.tools/actions/commit_version_bump/) git action. Like the git version, it is useful in conjunction with [`increment_build_number`](https://docs.fastlane.tools/actions/increment_build_number/). - It checks the repo to make sure that only the relevant files have changed, these are the files that `increment_build_number` (`agvtool`) touches:| - | - >- All `.plist` files| - - The `.xcodeproj/project.pbxproj` file| - >| - Then commits those files to the repo. - Customize the message with the `:message` option, defaults to 'Version Bump' - If you have other uncommitted changes in your repo, this action will fail. If you started off in a clean repo, and used the _ipa_ and or _sigh_ actions, then you can use the [clean_build_artifacts](https://docs.fastlane.tools/actions/clean_build_artifacts/) action to clean those temporary files up before running this action. - */ -func hgCommitVersionBump(message: String = "Version Bump", - xcodeproj: String? = nil, - force: Bool = false, - testDirtyFiles: String = "file1, file2", - testExpectedFiles: String = "file1, file2") { - let command = RubyCommand(commandID: "", methodName: "hg_commit_version_bump", className: nil, args: [RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "xcodeproj", value: xcodeproj), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "test_dirty_files", value: testDirtyFiles), - RubyCommand.Argument(name: "test_expected_files", value: testExpectedFiles)]) - _ = runner.executeCommand(command) -} - -/** - Raises an exception if there are uncommitted hg changes - - Along the same lines as the [ensure_git_status_clean](https://docs.fastlane.tools/actions/ensure_git_status_clean/) action, this is a sanity check to ensure the working mercurial repo is clean. Especially useful to put at the beginning of your Fastfile in the `before_all` block. - */ -func hgEnsureCleanStatus() { - let command = RubyCommand(commandID: "", methodName: "hg_ensure_clean_status", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - This will push changes to the remote hg repository - - - parameters: - - force: Force push to remote - - destination: The destination to push to - - The mercurial equivalent of [push_to_git_remote](https://docs.fastlane.tools/actions/push_to_git_remote/). Pushes your local commits to a remote mercurial repo. Useful when local changes such as adding a version bump commit or adding a tag are part of your lane’s actions. - */ -func hgPush(force: Bool = false, - destination: String = "") { - let command = RubyCommand(commandID: "", methodName: "hg_push", className: nil, args: [RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "destination", value: destination)]) - _ = runner.executeCommand(command) -} - -/** - Send a error/success message to [HipChat](https://www.hipchat.com/) - - - parameters: - - message: The message to post on HipChat - - channel: The room or @username - - apiToken: Hipchat API Token - - customColor: Specify a custom color, this overrides the success boolean. Can be one of 'yellow', 'red', 'green', 'purple', 'gray', or 'random' - - success: Was this build successful? (true/false) - - version: Version of the Hipchat API. Must be 1 or 2 - - notifyRoom: Should the people in the room be notified? (true/false) - - apiHost: The host of the HipChat-Server API - - messageFormat: Format of the message to post. Must be either 'html' or 'text' - - includeHtmlHeader: Should html formatted messages include a preformatted header? (true/false) - - from: Name the message will appear to be sent from - - Send a message to **room** (by default) or a direct message to **@username** with success (green) or failure (red) status. - */ -func hipchat(message: String = "", - channel: String, - apiToken: String, - customColor: String? = nil, - success: Bool = true, - version: String, - notifyRoom: Bool = false, - apiHost: String = "api.hipchat.com", - messageFormat: String = "html", - includeHtmlHeader: Bool = true, - from: String = "fastlane") { - let command = RubyCommand(commandID: "", methodName: "hipchat", className: nil, args: [RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "channel", value: channel), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "custom_color", value: customColor), - RubyCommand.Argument(name: "success", value: success), - RubyCommand.Argument(name: "version", value: version), - RubyCommand.Argument(name: "notify_room", value: notifyRoom), - RubyCommand.Argument(name: "api_host", value: apiHost), - RubyCommand.Argument(name: "message_format", value: messageFormat), - RubyCommand.Argument(name: "include_html_header", value: includeHtmlHeader), - RubyCommand.Argument(name: "from", value: from)]) - _ = runner.executeCommand(command) -} - -/** - Refer to [App Center](https://github.com/Microsoft/fastlane-plugin-appcenter/) - - - parameters: - - apk: Path to your APK file - - apiToken: API Token for Hockey Access - - ipa: Path to your IPA file. Optional if you use the _gym_ or _xcodebuild_ action. For Mac zip the .app. For Android provide path to .apk file. In addition you could use this to upload .msi, .zip, .pkg, etc if you use the 'create_update' mechanism - - dsym: Path to your symbols file. For iOS and Mac provide path to app.dSYM.zip. For Android provide path to mappings.txt file - - createUpdate: Set true if you want to create then update your app as opposed to just upload it. You will need the 'public_identifier', 'bundle_version' and 'bundle_short_version' - - notes: Beta Notes - - notify: Notify testers? "1" for yes - - status: Download status: "1" = No user can download; "2" = Available for download (only possible with full-access token) - - createStatus: Download status for initial version creation when create_update is true: "1" = No user can download; "2" = Available for download (only possible with full-access token) - - notesType: Notes type for your :notes, "0" = Textile, "1" = Markdown (default) - - releaseType: Release type of the app: "0" = Beta (default), "1" = Store, "2" = Alpha, "3" = Enterprise - - mandatory: Set to "1" to make this update mandatory - - teams: Comma separated list of team ID numbers to which this build will be restricted - - users: Comma separated list of user ID numbers to which this build will be restricted - - tags: Comma separated list of tags which will receive access to the build - - bundleShortVersion: The bundle_short_version of your application, required when using `create_update` - - bundleVersion: The bundle_version of your application, required when using `create_update` - - publicIdentifier: App id of the app you are targeting, usually you won't need this value. Required, if `upload_dsym_only` set to `true` - - commitSha: The Git commit SHA for this build - - repositoryUrl: The URL of your source repository - - buildServerUrl: The URL of the build job on your build server - - uploadDsymOnly: Flag to upload only the dSYM file to hockey app - - ownerId: ID for the owner of the app - - strategy: Strategy: 'add' = to add the build as a new build even if it has the same build number (default); 'replace' = to replace a build with the same build number - - timeout: Request timeout in seconds - - bypassCdn: Flag to bypass Hockey CDN when it uploads successfully but reports error - - dsaSignature: DSA signature for sparkle updates for macOS - - HockeyApp will be no longer supported and will be transitioned into App Center on November 16, 2019. - Please migrate over to [App Center](https://github.com/Microsoft/fastlane-plugin-appcenter/) - - Symbols will also be uploaded automatically if a `app.dSYM.zip` file is found next to `app.ipa`. In case it is located in a different place you can specify the path explicitly in the `:dsym` parameter. - More information about the available options can be found in the [HockeyApp Docs](http://support.hockeyapp.net/kb/api/api-versions#upload-version). - */ -func hockey(apk: String? = nil, - apiToken: String, - ipa: String? = nil, - dsym: String? = nil, - createUpdate: Bool = false, - notes: String = "No changelog given", - notify: String = "1", - status: String = "2", - createStatus: String = "2", - notesType: String = "1", - releaseType: String = "0", - mandatory: String = "0", - teams: String? = nil, - users: String? = nil, - tags: String? = nil, - bundleShortVersion: String? = nil, - bundleVersion: String? = nil, - publicIdentifier: String? = nil, - commitSha: String? = nil, - repositoryUrl: String? = nil, - buildServerUrl: String? = nil, - uploadDsymOnly: Bool = false, - ownerId: String? = nil, - strategy: String = "add", - timeout: Int? = nil, - bypassCdn: Bool = false, - dsaSignature: String = "") { - let command = RubyCommand(commandID: "", methodName: "hockey", className: nil, args: [RubyCommand.Argument(name: "apk", value: apk), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "dsym", value: dsym), - RubyCommand.Argument(name: "create_update", value: createUpdate), - RubyCommand.Argument(name: "notes", value: notes), - RubyCommand.Argument(name: "notify", value: notify), - RubyCommand.Argument(name: "status", value: status), - RubyCommand.Argument(name: "create_status", value: createStatus), - RubyCommand.Argument(name: "notes_type", value: notesType), - RubyCommand.Argument(name: "release_type", value: releaseType), - RubyCommand.Argument(name: "mandatory", value: mandatory), - RubyCommand.Argument(name: "teams", value: teams), - RubyCommand.Argument(name: "users", value: users), - RubyCommand.Argument(name: "tags", value: tags), - RubyCommand.Argument(name: "bundle_short_version", value: bundleShortVersion), - RubyCommand.Argument(name: "bundle_version", value: bundleVersion), - RubyCommand.Argument(name: "public_identifier", value: publicIdentifier), - RubyCommand.Argument(name: "commit_sha", value: commitSha), - RubyCommand.Argument(name: "repository_url", value: repositoryUrl), - RubyCommand.Argument(name: "build_server_url", value: buildServerUrl), - RubyCommand.Argument(name: "upload_dsym_only", value: uploadDsymOnly), - RubyCommand.Argument(name: "owner_id", value: ownerId), - RubyCommand.Argument(name: "strategy", value: strategy), - RubyCommand.Argument(name: "timeout", value: timeout), - RubyCommand.Argument(name: "bypass_cdn", value: bypassCdn), - RubyCommand.Argument(name: "dsa_signature", value: dsaSignature)]) - _ = runner.executeCommand(command) -} - -/** - Connect to the [IFTTT Maker Channel](https://ifttt.com/maker) - - - parameters: - - apiKey: API key - - eventName: The name of the event that will be triggered - - value1: Extra data sent with the event - - value2: Extra data sent with the event - - value3: Extra data sent with the event - - Connect to the IFTTT [Maker Channel](https://ifttt.com/maker). An IFTTT Recipe has two components: a Trigger and an Action. In this case, the Trigger will fire every time the Maker Channel receives a web request (made by this _fastlane_ action) to notify it of an event. The Action can be anything that IFTTT supports: email, SMS, etc. - */ -func ifttt(apiKey: String, - eventName: String, - value1: String? = nil, - value2: String? = nil, - value3: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "ifttt", className: nil, args: [RubyCommand.Argument(name: "api_key", value: apiKey), - RubyCommand.Argument(name: "event_name", value: eventName), - RubyCommand.Argument(name: "value1", value: value1), - RubyCommand.Argument(name: "value2", value: value2), - RubyCommand.Argument(name: "value3", value: value3)]) - _ = runner.executeCommand(command) -} - -/** - Import certificate from inputfile into a keychain - - - parameters: - - certificatePath: Path to certificate - - certificatePassword: Certificate password - - keychainName: Keychain the items should be imported to - - keychainPath: Path to the Keychain file to which the items should be imported - - keychainPassword: The password for the keychain. Note that for the login keychain this is your user's password - - logOutput: If output should be logged to the console - - Import certificates (and private keys) into the current default keychain. Use the `create_keychain` action to create a new keychain. - */ -func importCertificate(certificatePath: String, - certificatePassword: String? = nil, - keychainName: String, - keychainPath: String? = nil, - keychainPassword: String? = nil, - logOutput: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "import_certificate", className: nil, args: [RubyCommand.Argument(name: "certificate_path", value: certificatePath), - RubyCommand.Argument(name: "certificate_password", value: certificatePassword), - RubyCommand.Argument(name: "keychain_name", value: keychainName), - RubyCommand.Argument(name: "keychain_path", value: keychainPath), - RubyCommand.Argument(name: "keychain_password", value: keychainPassword), - RubyCommand.Argument(name: "log_output", value: logOutput)]) - _ = runner.executeCommand(command) -} - -/** - Increment the build number of your project - - - parameters: - - buildNumber: Change to a specific version. When you provide this parameter, Apple Generic Versioning does not have to be enabled - - xcodeproj: optional, you must specify the path to your main Xcode project if it is not in the project root directory - - - returns: The new build number - */ -@discardableResult func incrementBuildNumber(buildNumber: Any? = nil, - xcodeproj: String? = nil) -> String { - let command = RubyCommand(commandID: "", methodName: "increment_build_number", className: nil, args: [RubyCommand.Argument(name: "build_number", value: buildNumber), - RubyCommand.Argument(name: "xcodeproj", value: xcodeproj)]) - return runner.executeCommand(command) -} - -/** - Increment the version number of your project - - - parameters: - - bumpType: The type of this version bump. Available: patch, minor, major - - versionNumber: Change to a specific version. This will replace the bump type value - - xcodeproj: optional, you must specify the path to your main Xcode project if it is not in the project root directory - - - returns: The new version number - - This action will increment the version number. - You first have to set up your Xcode project, if you haven't done it already: [https://developer.apple.com/library/ios/qa/qa1827/_index.html](https://developer.apple.com/library/ios/qa/qa1827/_index.html). - */ -@discardableResult func incrementVersionNumber(bumpType: String = "bump", - versionNumber: String? = nil, - xcodeproj: String? = nil) -> String { - let command = RubyCommand(commandID: "", methodName: "increment_version_number", className: nil, args: [RubyCommand.Argument(name: "bump_type", value: bumpType), - RubyCommand.Argument(name: "version_number", value: versionNumber), - RubyCommand.Argument(name: "xcodeproj", value: xcodeproj)]) - return runner.executeCommand(command) -} - -/** - Installs an .ipa file on a connected iOS-device via usb or wifi - - - parameters: - - extra: Extra Commandline arguments passed to ios-deploy - - deviceId: id of the device / if not set defaults to first found device - - skipWifi: Do not search for devices via WiFi - - ipa: The IPA file to put on the device - - Installs the ipa on the device. If no id is given, the first found iOS device will be used. Works via USB or Wi-Fi. This requires `ios-deploy` to be installed. Please have a look at [ios-deploy](https://github.com/ios-control/ios-deploy). To quickly install it, use `npm -g i ios-deploy` - */ -func installOnDevice(extra: String? = nil, - deviceId: String? = nil, - skipWifi: Any? = nil, - ipa: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "install_on_device", className: nil, args: [RubyCommand.Argument(name: "extra", value: extra), - RubyCommand.Argument(name: "device_id", value: deviceId), - RubyCommand.Argument(name: "skip_wifi", value: skipWifi), - RubyCommand.Argument(name: "ipa", value: ipa)]) - _ = runner.executeCommand(command) -} - -/** - Install provisioning profile from path - - - parameter path: Path to provisioning profile - - - returns: The absolute path to the installed provisioning profile - - Install provisioning profile from path for current user - */ -func installProvisioningProfile(path: String) { - let command = RubyCommand(commandID: "", methodName: "install_provisioning_profile", className: nil, args: [RubyCommand.Argument(name: "path", value: path)]) - _ = runner.executeCommand(command) -} - -/** - Install an Xcode plugin for the current user - - - parameters: - - url: URL for Xcode plugin ZIP file - - github: GitHub repository URL for Xcode plugin - */ -func installXcodePlugin(url: String, - github: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "install_xcode_plugin", className: nil, args: [RubyCommand.Argument(name: "url", value: url), - RubyCommand.Argument(name: "github", value: github)]) - _ = runner.executeCommand(command) -} - -/** - Upload a new build to [Installr](http://installrapp.com/) - - - parameters: - - apiToken: API Token for Installr Access - - ipa: Path to your IPA file. Optional if you use the _gym_ or _xcodebuild_ action - - notes: Release notes - - notify: Groups to notify (e.g. 'dev,qa') - - add: Groups to add (e.g. 'exec,ops') - */ -func installr(apiToken: String, - ipa: String, - notes: String? = nil, - notify: String? = nil, - add: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "installr", className: nil, args: [RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "notes", value: notes), - RubyCommand.Argument(name: "notify", value: notify), - RubyCommand.Argument(name: "add", value: add)]) - _ = runner.executeCommand(command) -} - -/** - Easily build and sign your app using shenzhen - - - parameters: - - workspace: WORKSPACE Workspace (.xcworkspace) file to use to build app (automatically detected in current directory) - - project: Project (.xcodeproj) file to use to build app (automatically detected in current directory, overridden by --workspace option, if passed) - - configuration: Configuration used to build - - scheme: Scheme used to build app - - clean: Clean project before building - - archive: Archive project after building - - destination: Build destination. Defaults to current directory - - embed: Sign .ipa file with .mobileprovision - - identity: Identity to be used along with --embed - - sdk: Use SDK as the name or path of the base SDK when building the project - - ipa: Specify the name of the .ipa file to generate (including file extension) - - xcconfig: Use an extra XCCONFIG file to build the app - - xcargs: Pass additional arguments to xcodebuild when building the app. Be sure to quote multiple args - */ -func ipa(workspace: String? = nil, - project: String? = nil, - configuration: String? = nil, - scheme: String? = nil, - clean: Any? = nil, - archive: Any? = nil, - destination: String? = nil, - embed: String? = nil, - identity: String? = nil, - sdk: String? = nil, - ipa: String? = nil, - xcconfig: String? = nil, - xcargs: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "ipa", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "project", value: project), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "archive", value: archive), - RubyCommand.Argument(name: "destination", value: destination), - RubyCommand.Argument(name: "embed", value: embed), - RubyCommand.Argument(name: "identity", value: identity), - RubyCommand.Argument(name: "sdk", value: sdk), - RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "xcargs", value: xcargs)]) - _ = runner.executeCommand(command) -} - -/** - Is the current run being executed on a CI system, like Jenkins or Travis - - The return value of this method is true if fastlane is currently executed on Travis, Jenkins, Circle or a similar CI service - */ -@discardableResult func isCi() -> Bool { - let command = RubyCommand(commandID: "", methodName: "is_ci", className: nil, args: []) - return parseBool(fromString: runner.executeCommand(command)) -} - -/** - Generate docs using Jazzy - - - parameter config: Path to jazzy config file - */ -func jazzy(config: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "jazzy", className: nil, args: [RubyCommand.Argument(name: "config", value: config)]) - _ = runner.executeCommand(command) -} - -/** - Leave a comment on JIRA tickets - - - parameters: - - url: URL for Jira instance - - contextPath: Appends to the url (ex: "/jira") - - username: Username for JIRA instance - - password: Password for Jira - - ticketId: Ticket ID for Jira, i.e. IOS-123 - - commentText: Text to add to the ticket as a comment - */ -func jira(url: String, - contextPath: String = "", - username: String, - password: String, - ticketId: String, - commentText: String) { - let command = RubyCommand(commandID: "", methodName: "jira", className: nil, args: [RubyCommand.Argument(name: "url", value: url), - RubyCommand.Argument(name: "context_path", value: contextPath), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "password", value: password), - RubyCommand.Argument(name: "ticket_id", value: ticketId), - RubyCommand.Argument(name: "comment_text", value: commentText)]) - _ = runner.executeCommand(command) -} - -/** - Access lane context values - - Access the fastlane lane context values. - More information about how the lane context works: [https://docs.fastlane.tools/advanced/#lane-context](https://docs.fastlane.tools/advanced/#lane-context). - */ -@discardableResult func laneContext() -> [String: Any] { - let command = RubyCommand(commandID: "", methodName: "lane_context", className: nil, args: []) - return parseDictionary(fromString: runner.executeCommand(command)) -} - -/** - Return last git commit hash, abbreviated commit hash, commit message and author - - - returns: Returns the following dict: {commit_hash: "commit hash", abbreviated_commit_hash: "abbreviated commit hash" author: "Author", author_email: "author email", message: "commit message"}. Example: {:message=>"message", :author=>"author", :author_email=>"author_email", :commit_hash=>"commit_hash", :abbreviated_commit_hash=>"short_hash"} - */ -@discardableResult func lastGitCommit() -> [String: String] { - let command = RubyCommand(commandID: "", methodName: "last_git_commit", className: nil, args: []) - return parseDictionary(fromString: runner.executeCommand(command)) -} - -/** - Get the most recent git tag - - - parameter pattern: Pattern to filter tags when looking for last one. Limit tags to ones matching given shell glob. If pattern lacks ?, *, or [, * at the end is implied - - If you are using this action on a **shallow clone**, *the default with some CI systems like Bamboo*, you need to ensure that you have also pulled all the git tags appropriately. Assuming your git repo has the correct remote set you can issue `sh('git fetch --tags')`. - Pattern parameter allows you to filter to a subset of tags. - */ -@discardableResult func lastGitTag(pattern: String? = nil) -> String { - let command = RubyCommand(commandID: "", methodName: "last_git_tag", className: nil, args: [RubyCommand.Argument(name: "pattern", value: pattern)]) - return runner.executeCommand(command) -} - -/** - Fetches most recent build number from TestFlight - - - parameters: - - live: Query the live version (ready-for-sale) - - appIdentifier: The bundle identifier of your app - - username: Your Apple ID Username - - version: The version number whose latest build number we want - - platform: The platform to use (optional) - - initialBuildNumber: sets the build number to given value if no build is in current train - - teamId: The ID of your App Store Connect team if you're in multiple teams - - teamName: The name of your App Store Connect team if you're in multiple teams - - - returns: Integer representation of the latest build number uploaded to TestFlight. Example: 2 - - Provides a way to have `increment_build_number` be based on the latest build you uploaded to iTC. - Fetches the most recent build number from TestFlight based on the version number. Provides a way to have `increment_build_number` be based on the latest build you uploaded to iTC. - */ -@discardableResult func latestTestflightBuildNumber(live: Bool = false, - appIdentifier: String, - username: String, - version: String? = nil, - platform: String = "ios", - initialBuildNumber: Int = 1, - teamId: Any? = nil, - teamName: String? = nil) -> Int { - let command = RubyCommand(commandID: "", methodName: "latest_testflight_build_number", className: nil, args: [RubyCommand.Argument(name: "live", value: live), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "version", value: version), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "initial_build_number", value: initialBuildNumber), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName)]) - return parseInt(fromString: runner.executeCommand(command)) -} - -/** - Generates coverage data using lcov - - - parameters: - - projectName: Name of the project - - scheme: Scheme of the project - - arch: The build arch where will search .gcda files - - outputDir: The output directory that coverage data will be stored. If not passed will use coverage_reports as default value - */ -func lcov(projectName: String, - scheme: String, - arch: String = "i386", - outputDir: String = "coverage_reports") { - let command = RubyCommand(commandID: "", methodName: "lcov", className: nil, args: [RubyCommand.Argument(name: "project_name", value: projectName), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "arch", value: arch), - RubyCommand.Argument(name: "output_dir", value: outputDir)]) - _ = runner.executeCommand(command) -} - -/** - Send a success/error message to an email group - - - parameters: - - mailgunSandboxDomain: Mailgun sandbox domain postmaster for your mail. Please use postmaster instead - - mailgunSandboxPostmaster: Mailgun sandbox domain postmaster for your mail. Please use postmaster instead - - mailgunApikey: Mailgun apikey for your mail. Please use postmaster instead - - postmaster: Mailgun sandbox domain postmaster for your mail - - apikey: Mailgun apikey for your mail - - to: Destination of your mail - - from: Mailgun sender name - - message: Message of your mail - - subject: Subject of your mail - - success: Was this build successful? (true/false) - - appLink: App Release link - - ciBuildLink: CI Build Link - - templatePath: Mail HTML template - - replyTo: Mail Reply to - - attachment: Mail Attachment filenames, either an array or just one string - - customPlaceholders: Placeholders for template given as a hash - */ -func mailgun(mailgunSandboxDomain: String? = nil, - mailgunSandboxPostmaster: String? = nil, - mailgunApikey: String? = nil, - postmaster: String, - apikey: String, - to: String, - from: String = "Mailgun Sandbox", - message: String, - subject: String = "fastlane build", - success: Bool = true, - appLink: String, - ciBuildLink: String? = nil, - templatePath: String? = nil, - replyTo: String? = nil, - attachment: Any? = nil, - customPlaceholders: [String: Any] = [:]) { - let command = RubyCommand(commandID: "", methodName: "mailgun", className: nil, args: [RubyCommand.Argument(name: "mailgun_sandbox_domain", value: mailgunSandboxDomain), - RubyCommand.Argument(name: "mailgun_sandbox_postmaster", value: mailgunSandboxPostmaster), - RubyCommand.Argument(name: "mailgun_apikey", value: mailgunApikey), - RubyCommand.Argument(name: "postmaster", value: postmaster), - RubyCommand.Argument(name: "apikey", value: apikey), - RubyCommand.Argument(name: "to", value: to), - RubyCommand.Argument(name: "from", value: from), - RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "subject", value: subject), - RubyCommand.Argument(name: "success", value: success), - RubyCommand.Argument(name: "app_link", value: appLink), - RubyCommand.Argument(name: "ci_build_link", value: ciBuildLink), - RubyCommand.Argument(name: "template_path", value: templatePath), - RubyCommand.Argument(name: "reply_to", value: replyTo), - RubyCommand.Argument(name: "attachment", value: attachment), - RubyCommand.Argument(name: "custom_placeholders", value: customPlaceholders)]) - _ = runner.executeCommand(command) -} - -/** - Generate a changelog using the Changes section from the current Jenkins build - - - parameters: - - fallbackChangelog: Fallback changelog if there is not one on Jenkins, or it couldn't be read - - includeCommitBody: Include the commit body along with the summary - - This is useful when deploying automated builds. The changelog from Jenkins lists all the commit messages since the last build. - */ -func makeChangelogFromJenkins(fallbackChangelog: String = "", - includeCommitBody: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "make_changelog_from_jenkins", className: nil, args: [RubyCommand.Argument(name: "fallback_changelog", value: fallbackChangelog), - RubyCommand.Argument(name: "include_commit_body", value: includeCommitBody)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `sync_code_signing` action - - - parameters: - - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id - - additionalCertTypes: Create additional cert types needed for macOS installers (valid values: mac_installer_distribution, developer_id_installer) - - readonly: Only fetch existing certificates and profiles, don't generate new ones - - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution) - - skipProvisioningProfiles: Skip syncing provisioning profiles - - appIdentifier: The bundle identifier(s) of your app (comma-separated) - - username: Your Apple ID Username - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - storageMode: Define where you want to store your certificates - - gitUrl: URL to the git repo containing all the certificates - - gitBranch: Specific git branch to use - - gitFullName: git user full name to commit - - gitUserEmail: git user email to commit - - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision) - - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail - - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64 - - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64 - - googleCloudBucketName: Name of the Google Cloud Storage bucket to use - - googleCloudKeysFile: Path to the gc_keys.json file - - googleCloudProjectId: ID of the Google Cloud project to use for authentication - - s3Region: Name of the S3 region - - s3AccessKey: S3 access key - - s3SecretAccessKey: S3 secret access key - - s3Bucket: Name of the S3 bucket - - s3ObjectPrefix: Prefix to be used on all objects uploaded to S3 - - keychainName: Keychain the items should be imported to - - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password - - force: Renew the provisioning profiles every time you run match - - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile type 'appstore' - - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes - - skipDocs: Skip generation of a README.md for the created git repository - - platform: Set the provisioning profile's platform to work with (i.e. ios, tvos, macos) - - templateName: The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. "Apple Pay Pass Suppression Development") - - profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified - - failOnNameTaken: Should the command fail if it was about to create a duplicate of an existing provisioning profile. It can happen due to issues on Apple Developer Portal, when profile to be recreated was not properly deleted first - - outputPath: Path in which to export certificates, key and profile - - verbose: Print out extra information and all commands - - More information: https://docs.fastlane.tools/actions/match/ - */ -func match(type: Any = matchfile.type, - additionalCertTypes: [String]? = matchfile.additionalCertTypes, - readonly: Bool = matchfile.readonly, - generateAppleCerts: Bool = matchfile.generateAppleCerts, - skipProvisioningProfiles: Bool = matchfile.skipProvisioningProfiles, - appIdentifier: [String] = matchfile.appIdentifier, - username: Any = matchfile.username, - teamId: Any? = matchfile.teamId, - teamName: Any? = matchfile.teamName, - storageMode: Any = matchfile.storageMode, - gitUrl: Any = matchfile.gitUrl, - gitBranch: Any = matchfile.gitBranch, - gitFullName: Any? = matchfile.gitFullName, - gitUserEmail: Any? = matchfile.gitUserEmail, - shallowClone: Bool = matchfile.shallowClone, - cloneBranchDirectly: Bool = matchfile.cloneBranchDirectly, - gitBasicAuthorization: Any? = matchfile.gitBasicAuthorization, - gitBearerAuthorization: Any? = matchfile.gitBearerAuthorization, - googleCloudBucketName: Any? = matchfile.googleCloudBucketName, - googleCloudKeysFile: Any? = matchfile.googleCloudKeysFile, - googleCloudProjectId: Any? = matchfile.googleCloudProjectId, - s3Region: Any? = matchfile.s3Region, - s3AccessKey: Any? = matchfile.s3AccessKey, - s3SecretAccessKey: Any? = matchfile.s3SecretAccessKey, - s3Bucket: Any? = matchfile.s3Bucket, - s3ObjectPrefix: Any? = matchfile.s3ObjectPrefix, - keychainName: Any = matchfile.keychainName, - keychainPassword: Any? = matchfile.keychainPassword, - force: Bool = matchfile.force, - forceForNewDevices: Bool = matchfile.forceForNewDevices, - skipConfirmation: Bool = matchfile.skipConfirmation, - skipDocs: Bool = matchfile.skipDocs, - platform: Any = matchfile.platform, - templateName: Any? = matchfile.templateName, - profileName: Any? = matchfile.profileName, - failOnNameTaken: Bool = matchfile.failOnNameTaken, - outputPath: Any? = matchfile.outputPath, - verbose: Bool = matchfile.verbose) { - let command = RubyCommand(commandID: "", methodName: "match", className: nil, args: [RubyCommand.Argument(name: "type", value: type), - RubyCommand.Argument(name: "additional_cert_types", value: additionalCertTypes), - RubyCommand.Argument(name: "readonly", value: readonly), - RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts), - RubyCommand.Argument(name: "skip_provisioning_profiles", value: skipProvisioningProfiles), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "storage_mode", value: storageMode), - RubyCommand.Argument(name: "git_url", value: gitUrl), - RubyCommand.Argument(name: "git_branch", value: gitBranch), - RubyCommand.Argument(name: "git_full_name", value: gitFullName), - RubyCommand.Argument(name: "git_user_email", value: gitUserEmail), - RubyCommand.Argument(name: "shallow_clone", value: shallowClone), - RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly), - RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization), - RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization), - RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName), - RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile), - RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId), - RubyCommand.Argument(name: "s3_region", value: s3Region), - RubyCommand.Argument(name: "s3_access_key", value: s3AccessKey), - RubyCommand.Argument(name: "s3_secret_access_key", value: s3SecretAccessKey), - RubyCommand.Argument(name: "s3_bucket", value: s3Bucket), - RubyCommand.Argument(name: "s3_object_prefix", value: s3ObjectPrefix), - RubyCommand.Argument(name: "keychain_name", value: keychainName), - RubyCommand.Argument(name: "keychain_password", value: keychainPassword), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "force_for_new_devices", value: forceForNewDevices), - RubyCommand.Argument(name: "skip_confirmation", value: skipConfirmation), - RubyCommand.Argument(name: "skip_docs", value: skipDocs), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "template_name", value: templateName), - RubyCommand.Argument(name: "profile_name", value: profileName), - RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken), - RubyCommand.Argument(name: "output_path", value: outputPath), - RubyCommand.Argument(name: "verbose", value: verbose)]) - _ = runner.executeCommand(command) -} - -/** - Verifies the minimum fastlane version required - - Add this to your `Fastfile` to require a certain version of _fastlane_. - Use it if you use an action that just recently came out and you need it. - */ -func minFastlaneVersion() { - let command = RubyCommand(commandID: "", methodName: "min_fastlane_version", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Modifies the services of the app created on Developer Portal - - - parameters: - - username: Your Apple ID Username - - appIdentifier: App Identifier (Bundle ID, e.g. com.krausefx.app) - - services: Array with Spaceship App Services (e.g. access_wifi: (on|off)(:on|:off)(true|false), app_group: (on|off)(:on|:off)(true|false), apple_pay: (on|off)(:on|:off)(true|false), associated_domains: (on|off)(:on|:off)(true|false), auto_fill_credential: (on|off)(:on|:off)(true|false), data_protection: (complete|unlessopen|untilfirstauth)(:on|:off)(true|false), game_center: (on|off)(:on|:off)(true|false), health_kit: (on|off)(:on|:off)(true|false), home_kit: (on|off)(:on|:off)(true|false), hotspot: (on|off)(:on|:off)(true|false), icloud: (legacy|cloudkit)(:on|:off)(true|false), in_app_purchase: (on|off)(:on|:off)(true|false), inter_app_audio: (on|off)(:on|:off)(true|false), multipath: (on|off)(:on|:off)(true|false), network_extension: (on|off)(:on|:off)(true|false), nfc_tag_reading: (on|off)(:on|:off)(true|false), personal_vpn: (on|off)(:on|:off)(true|false), passbook: (on|off)(:on|:off)(true|false), push_notification: (on|off)(:on|:off)(true|false), siri_kit: (on|off)(:on|:off)(true|false), vpn_configuration: (on|off)(:on|:off)(true|false), wallet: (on|off)(:on|:off)(true|false), wireless_accessory: (on|off)(:on|:off)(true|false)) - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - The options are the same as `:enable_services` in the [produce action](https://docs.fastlane.tools/actions/produce/#parameters_1) - */ -func modifyServices(username: String, - appIdentifier: String, - services: [String: Any] = [:], - teamId: String? = nil, - teamName: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "modify_services", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "services", value: services), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName)]) - _ = runner.executeCommand(command) -} - -/** - Upload a file to [Sonatype Nexus platform](https://www.sonatype.com) - - - parameters: - - file: File to be uploaded to Nexus - - repoId: Nexus repository id e.g. artefacts - - repoGroupId: Nexus repository group id e.g. com.company - - repoProjectName: Nexus repository commandect name. Only letters, digits, underscores(_), hyphens(-), and dots(.) are allowed - - repoProjectVersion: Nexus repository commandect version - - repoClassifier: Nexus repository artifact classifier (optional) - - endpoint: Nexus endpoint e.g. http://nexus:8081 - - mountPath: Nexus mount path (Nexus 3 instances have this configured as empty by default) - - username: Nexus username - - password: Nexus password - - sslVerify: Verify SSL - - nexusVersion: Nexus major version - - verbose: Make detailed output - - proxyUsername: Proxy username - - proxyPassword: Proxy password - - proxyAddress: Proxy address - - proxyPort: Proxy port - */ -func nexusUpload(file: String, - repoId: String, - repoGroupId: String, - repoProjectName: String, - repoProjectVersion: String, - repoClassifier: String? = nil, - endpoint: String, - mountPath: String = "/nexus", - username: String, - password: String, - sslVerify: Bool = true, - nexusVersion: Int = 2, - verbose: Bool = false, - proxyUsername: String? = nil, - proxyPassword: String? = nil, - proxyAddress: String? = nil, - proxyPort: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "nexus_upload", className: nil, args: [RubyCommand.Argument(name: "file", value: file), - RubyCommand.Argument(name: "repo_id", value: repoId), - RubyCommand.Argument(name: "repo_group_id", value: repoGroupId), - RubyCommand.Argument(name: "repo_project_name", value: repoProjectName), - RubyCommand.Argument(name: "repo_project_version", value: repoProjectVersion), - RubyCommand.Argument(name: "repo_classifier", value: repoClassifier), - RubyCommand.Argument(name: "endpoint", value: endpoint), - RubyCommand.Argument(name: "mount_path", value: mountPath), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "password", value: password), - RubyCommand.Argument(name: "ssl_verify", value: sslVerify), - RubyCommand.Argument(name: "nexus_version", value: nexusVersion), - RubyCommand.Argument(name: "verbose", value: verbose), - RubyCommand.Argument(name: "proxy_username", value: proxyUsername), - RubyCommand.Argument(name: "proxy_password", value: proxyPassword), - RubyCommand.Argument(name: "proxy_address", value: proxyAddress), - RubyCommand.Argument(name: "proxy_port", value: proxyPort)]) - _ = runner.executeCommand(command) -} - -/** - Notarizes a macOS app - - - parameters: - - package: Path to package to notarize, e.g. .app bundle or disk image - - tryEarlyStapling: Whether to try early stapling while the notarization request is in progress - - bundleId: Bundle identifier to uniquely identify the package - - username: Apple ID username - - ascProvider: Provider short name for accounts associated with multiple providers - - printLog: Whether to print notarization log file, listing issues on failure and warnings on success - - verbose: Whether to log requests - */ -func notarize(package: String, - tryEarlyStapling: Bool = false, - bundleId: String? = nil, - username: String, - ascProvider: String? = nil, - printLog: Bool = false, - verbose: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "notarize", className: nil, args: [RubyCommand.Argument(name: "package", value: package), - RubyCommand.Argument(name: "try_early_stapling", value: tryEarlyStapling), - RubyCommand.Argument(name: "bundle_id", value: bundleId), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "asc_provider", value: ascProvider), - RubyCommand.Argument(name: "print_log", value: printLog), - RubyCommand.Argument(name: "verbose", value: verbose)]) - _ = runner.executeCommand(command) -} - -/** - Display a macOS notification with custom message and title - - - parameters: - - title: The title to display in the notification - - subtitle: A subtitle to display in the notification - - message: The message to display in the notification - - sound: The name of a sound to play when the notification appears (names are listed in Sound Preferences) - - activate: Bundle identifier of application to be opened when the notification is clicked - - appIcon: The URL of an image to display instead of the application icon (Mavericks+ only) - - contentImage: The URL of an image to display attached to the notification (Mavericks+ only) - - open: URL of the resource to be opened when the notification is clicked - - execute: Shell command to run when the notification is clicked - */ -func notification(title: String = "fastlane", - subtitle: String? = nil, - message: String, - sound: String? = nil, - activate: String? = nil, - appIcon: String? = nil, - contentImage: String? = nil, - open: String? = nil, - execute: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "notification", className: nil, args: [RubyCommand.Argument(name: "title", value: title), - RubyCommand.Argument(name: "subtitle", value: subtitle), - RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "sound", value: sound), - RubyCommand.Argument(name: "activate", value: activate), - RubyCommand.Argument(name: "app_icon", value: appIcon), - RubyCommand.Argument(name: "content_image", value: contentImage), - RubyCommand.Argument(name: "open", value: open), - RubyCommand.Argument(name: "execute", value: execute)]) - _ = runner.executeCommand(command) -} - -/** - Shows a macOS notification - use `notification` instead - */ -func notify() { - let command = RubyCommand(commandID: "", methodName: "notify", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Return the number of commits in current git branch - - - parameter all: Returns number of all commits instead of current branch - - - returns: The total number of all commits in current git branch - - You can use this action to get the number of commits of this branch. This is useful if you want to set the build number to the number of commits. See `fastlane actions number_of_commits` for more details. - */ -@discardableResult func numberOfCommits(all: Any? = nil) -> Int { - let command = RubyCommand(commandID: "", methodName: "number_of_commits", className: nil, args: [RubyCommand.Argument(name: "all", value: all)]) - return parseInt(fromString: runner.executeCommand(command)) -} - -/** - Lints implementation files with OCLint - - - parameters: - - oclintPath: The path to oclint binary - - compileCommands: The json compilation database, use xctool reporter 'json-compilation-database' - - selectReqex: Select all files matching this reqex - - selectRegex: Select all files matching this regex - - excludeRegex: Exclude all files matching this regex - - reportType: The type of the report (default: html) - - reportPath: The reports file path - - listEnabledRules: List enabled rules - - rc: Override the default behavior of rules - - thresholds: List of rule thresholds to override the default behavior of rules - - enableRules: List of rules to pick explicitly - - disableRules: List of rules to disable - - maxPriority1: The max allowed number of priority 1 violations - - maxPriority2: The max allowed number of priority 2 violations - - maxPriority3: The max allowed number of priority 3 violations - - enableClangStaticAnalyzer: Enable Clang Static Analyzer, and integrate results into OCLint report - - enableGlobalAnalysis: Compile every source, and analyze across global contexts (depends on number of source files, could results in high memory load) - - allowDuplicatedViolations: Allow duplicated violations in the OCLint report - - extraArg: Additional argument to append to the compiler command line - - Run the static analyzer tool [OCLint](http://oclint.org) for your project. You need to have a `compile_commands.json` file in your _fastlane_ directory or pass a path to your file. - */ -func oclint(oclintPath: String = "oclint", - compileCommands: String = "compile_commands.json", - selectReqex: Any? = nil, - selectRegex: Any? = nil, - excludeRegex: Any? = nil, - reportType: String = "html", - reportPath: String? = nil, - listEnabledRules: Bool = false, - rc: String? = nil, - thresholds: Any? = nil, - enableRules: Any? = nil, - disableRules: Any? = nil, - maxPriority1: Any? = nil, - maxPriority2: Any? = nil, - maxPriority3: Any? = nil, - enableClangStaticAnalyzer: Bool = false, - enableGlobalAnalysis: Bool = false, - allowDuplicatedViolations: Bool = false, - extraArg: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "oclint", className: nil, args: [RubyCommand.Argument(name: "oclint_path", value: oclintPath), - RubyCommand.Argument(name: "compile_commands", value: compileCommands), - RubyCommand.Argument(name: "select_reqex", value: selectReqex), - RubyCommand.Argument(name: "select_regex", value: selectRegex), - RubyCommand.Argument(name: "exclude_regex", value: excludeRegex), - RubyCommand.Argument(name: "report_type", value: reportType), - RubyCommand.Argument(name: "report_path", value: reportPath), - RubyCommand.Argument(name: "list_enabled_rules", value: listEnabledRules), - RubyCommand.Argument(name: "rc", value: rc), - RubyCommand.Argument(name: "thresholds", value: thresholds), - RubyCommand.Argument(name: "enable_rules", value: enableRules), - RubyCommand.Argument(name: "disable_rules", value: disableRules), - RubyCommand.Argument(name: "max_priority_1", value: maxPriority1), - RubyCommand.Argument(name: "max_priority_2", value: maxPriority2), - RubyCommand.Argument(name: "max_priority_3", value: maxPriority3), - RubyCommand.Argument(name: "enable_clang_static_analyzer", value: enableClangStaticAnalyzer), - RubyCommand.Argument(name: "enable_global_analysis", value: enableGlobalAnalysis), - RubyCommand.Argument(name: "allow_duplicated_violations", value: allowDuplicatedViolations), - RubyCommand.Argument(name: "extra_arg", value: extraArg)]) - _ = runner.executeCommand(command) -} - -/** - Create or update a new [OneSignal](https://onesignal.com/) application - - - parameters: - - appId: OneSignal App ID. Setting this updates an existing app - - authToken: OneSignal Authorization Key - - appName: OneSignal App Name. This is required when creating an app (in other words, when `:app_id` is not set, and optional when updating an app - - androidToken: ANDROID GCM KEY - - androidGcmSenderId: GCM SENDER ID - - apnsP12: APNS P12 File (in .p12 format) - - apnsP12Password: APNS P12 password - - apnsEnv: APNS environment - - You can use this action to automatically create or update a OneSignal application. You can also upload a `.p12` with password, a GCM key, or both. - */ -func onesignal(appId: String? = nil, - authToken: String, - appName: String? = nil, - androidToken: String? = nil, - androidGcmSenderId: String? = nil, - apnsP12: String? = nil, - apnsP12Password: String? = nil, - apnsEnv: String = "production") { - let command = RubyCommand(commandID: "", methodName: "onesignal", className: nil, args: [RubyCommand.Argument(name: "app_id", value: appId), - RubyCommand.Argument(name: "auth_token", value: authToken), - RubyCommand.Argument(name: "app_name", value: appName), - RubyCommand.Argument(name: "android_token", value: androidToken), - RubyCommand.Argument(name: "android_gcm_sender_id", value: androidGcmSenderId), - RubyCommand.Argument(name: "apns_p12", value: apnsP12), - RubyCommand.Argument(name: "apns_p12_password", value: apnsP12Password), - RubyCommand.Argument(name: "apns_env", value: apnsEnv)]) - _ = runner.executeCommand(command) -} - -/** - This will prevent reports from being uploaded when _fastlane_ crashes - - _fastlane_ doesn't have crash reporting any more. Feel free to remove `opt_out_crash_reporting` from your Fastfile. - */ -func optOutCrashReporting() { - let command = RubyCommand(commandID: "", methodName: "opt_out_crash_reporting", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - This will stop uploading the information which actions were run - - By default, _fastlane_ will track what actions are being used. No personal/sensitive information is recorded. - Learn more at [https://docs.fastlane.tools/#metrics](https://docs.fastlane.tools/#metrics). - Add `opt_out_usage` at the top of your Fastfile to disable metrics collection. - */ -func optOutUsage() { - let command = RubyCommand(commandID: "", methodName: "opt_out_usage", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Alias for the `get_push_certificate` action - - - parameters: - - development: Renew the development push certificate instead of the production one - - websitePush: Create a Website Push certificate - - generateP12: Generate a p12 file additionally to a PEM file - - activeDaysLimit: If the current certificate is active for less than this number of days, generate a new one - - force: Create a new push certificate, even if the current one is active for 30 (or PEM_ACTIVE_DAYS_LIMIT) more days - - savePrivateKey: Set to save the private RSA key - - appIdentifier: The bundle identifier of your app - - username: Your Apple ID Username - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - p12Password: The password that is used for your p12 file - - pemName: The file name of the generated .pem file - - outputPath: The path to a directory in which all certificates and private keys should be stored - - newProfile: Block that is called if there is a new profile - - Additionally to the available options, you can also specify a block that only gets executed if a new profile was created. You can use it to upload the new profile to your server. - Use it like this:| - | - ```ruby| - get_push_certificate(| - new_profile: proc do| - # your upload code| - end| - )| - ```| - >| - */ -func pem(development: Bool = false, - websitePush: Bool = false, - generateP12: Bool = true, - activeDaysLimit: Int = 30, - force: Bool = false, - savePrivateKey: Bool = true, - appIdentifier: String, - username: String, - teamId: String? = nil, - teamName: String? = nil, - p12Password: String, - pemName: String? = nil, - outputPath: String = ".", - newProfile: Any? = nil) { - let command = RubyCommand(commandID: "", methodName: "pem", className: nil, args: [RubyCommand.Argument(name: "development", value: development), - RubyCommand.Argument(name: "website_push", value: websitePush), - RubyCommand.Argument(name: "generate_p12", value: generateP12), - RubyCommand.Argument(name: "active_days_limit", value: activeDaysLimit), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "save_private_key", value: savePrivateKey), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "p12_password", value: p12Password), - RubyCommand.Argument(name: "pem_name", value: pemName), - RubyCommand.Argument(name: "output_path", value: outputPath), - RubyCommand.Argument(name: "new_profile", value: newProfile)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `upload_to_testflight` action - - - parameters: - - username: Your Apple ID Username - - appIdentifier: The bundle identifier of the app to upload or manage testers (optional) - - appPlatform: The platform to use (optional) - - appleId: Apple ID property in the App Information section in App Store Connect - - ipa: Path to the ipa file to upload - - demoAccountRequired: Do you need a demo account when Apple does review? - - betaAppReviewInfo: Beta app review information for contact info and demo account - - localizedAppInfo: Localized beta app test info for description, feedback email, marketing url, and privacy policy - - betaAppDescription: Provide the 'Beta App Description' when uploading a new build - - betaAppFeedbackEmail: Provide the beta app email when uploading a new build - - localizedBuildInfo: Localized beta app test info for what's new - - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog - - skipSubmission: Skip the distributing action of pilot and only upload the ipa file - - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps - - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default - - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command) - - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist - - distributeExternal: Should the build be distributed to external testers? - - notifyExternalTesters: Should notify external testers? - - appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed - - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed - - expirePreviousBuilds: Should expire previous builds? - - firstName: The tester's first name - - lastName: The tester's last name - - email: The tester's email - - testersFilePath: Path to a CSV file of testers - - groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","Team 2"` - - teamId: The ID of your App Store Connect team if you're in multiple teams - - teamName: The name of your App Store Connect team if you're in multiple teams - - devPortalTeamId: The short ID of your team in the developer portal, if you're in multiple teams. Different from your iTC team ID! - - itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column - - waitProcessingInterval: Interval in seconds to wait for App Store Connect processing - - waitForUploadedBuild: **DEPRECATED!** No longer needed with the transition over to the App Store Connect API - Use version info from uploaded ipa file to determine what build to use for distribution. If set to false, latest processing or any latest build will be used - - rejectBuildWaitingForReview: Expire previous if it's 'waiting for review' - - More details can be found on https://docs.fastlane.tools/actions/pilot/. - This integration will only do the TestFlight upload. - */ -func pilot(username: String, - appIdentifier: String? = nil, - appPlatform: String = "ios", - appleId: String? = nil, - ipa: String? = nil, - demoAccountRequired: Bool = false, - betaAppReviewInfo: [String: Any]? = nil, - localizedAppInfo: [String: Any]? = nil, - betaAppDescription: String? = nil, - betaAppFeedbackEmail: String? = nil, - localizedBuildInfo: [String: Any]? = nil, - changelog: String? = nil, - skipSubmission: Bool = false, - skipWaitingForBuildProcessing: Bool = false, - updateBuildInfoOnUpload: Bool = false, - distributeOnly: Bool = false, - usesNonExemptEncryption: Bool = false, - distributeExternal: Bool = false, - notifyExternalTesters: Bool = true, - appVersion: String? = nil, - buildNumber: String? = nil, - expirePreviousBuilds: Bool = false, - firstName: String? = nil, - lastName: String? = nil, - email: String? = nil, - testersFilePath: String = "./testers.csv", - groups: [String]? = nil, - teamId: Any? = nil, - teamName: String? = nil, - devPortalTeamId: String? = nil, - itcProvider: String? = nil, - waitProcessingInterval: Int = 30, - waitForUploadedBuild: Bool = false, - rejectBuildWaitingForReview: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "pilot", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "app_platform", value: appPlatform), - RubyCommand.Argument(name: "apple_id", value: appleId), - RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "demo_account_required", value: demoAccountRequired), - RubyCommand.Argument(name: "beta_app_review_info", value: betaAppReviewInfo), - RubyCommand.Argument(name: "localized_app_info", value: localizedAppInfo), - RubyCommand.Argument(name: "beta_app_description", value: betaAppDescription), - RubyCommand.Argument(name: "beta_app_feedback_email", value: betaAppFeedbackEmail), - RubyCommand.Argument(name: "localized_build_info", value: localizedBuildInfo), - RubyCommand.Argument(name: "changelog", value: changelog), - RubyCommand.Argument(name: "skip_submission", value: skipSubmission), - RubyCommand.Argument(name: "skip_waiting_for_build_processing", value: skipWaitingForBuildProcessing), - RubyCommand.Argument(name: "update_build_info_on_upload", value: updateBuildInfoOnUpload), - RubyCommand.Argument(name: "distribute_only", value: distributeOnly), - RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption), - RubyCommand.Argument(name: "distribute_external", value: distributeExternal), - RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters), - RubyCommand.Argument(name: "app_version", value: appVersion), - RubyCommand.Argument(name: "build_number", value: buildNumber), - RubyCommand.Argument(name: "expire_previous_builds", value: expirePreviousBuilds), - RubyCommand.Argument(name: "first_name", value: firstName), - RubyCommand.Argument(name: "last_name", value: lastName), - RubyCommand.Argument(name: "email", value: email), - RubyCommand.Argument(name: "testers_file_path", value: testersFilePath), - RubyCommand.Argument(name: "groups", value: groups), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId), - RubyCommand.Argument(name: "itc_provider", value: itcProvider), - RubyCommand.Argument(name: "wait_processing_interval", value: waitProcessingInterval), - RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild), - RubyCommand.Argument(name: "reject_build_waiting_for_review", value: rejectBuildWaitingForReview)]) - _ = runner.executeCommand(command) -} - -/** - No description provided - - - parameters: - - outputPath: - - templatePath: - - cachePath: - */ -func pluginScores(outputPath: String, - templatePath: String, - cachePath: String) { - let command = RubyCommand(commandID: "", methodName: "plugin_scores", className: nil, args: [RubyCommand.Argument(name: "output_path", value: outputPath), - RubyCommand.Argument(name: "template_path", value: templatePath), - RubyCommand.Argument(name: "cache_path", value: cachePath)]) - _ = runner.executeCommand(command) -} - -/** - Pod lib lint - - - parameters: - - useBundleExec: Use bundle exec when there is a Gemfile presented - - podspec: Path of spec to lint - - verbose: Allow output detail in console - - allowWarnings: Allow warnings during pod lint - - sources: The sources of repos you want the pod spec to lint with, separated by commas - - subspec: A specific subspec to lint instead of the entire spec - - includePodspecs: A Glob of additional ancillary podspecs which are used for linting via :path (available since cocoapods >= 1.7) - - externalPodspecs: A Glob of additional ancillary podspecs which are used for linting via :podspec. If there are --include-podspecs, then these are removed from them (available since cocoapods >= 1.7) - - swiftVersion: The SWIFT_VERSION that should be used to lint the spec. This takes precedence over a .swift-version file - - useLibraries: Lint uses static libraries to install the spec - - useModularHeaders: Lint using modular libraries (available since cocoapods >= 1.6) - - failFast: Lint stops on the first failing platform or subspec - - private: Lint skips checks that apply only to public specs - - quick: Lint skips checks that would require to download and build the spec - - noClean: Lint leaves the build directory intact for inspection - - noSubspecs: Lint skips validation of subspecs - - platforms: Lint against specific platforms (defaults to all platforms supported by the podspec). Multiple platforms must be comma-delimited (available since cocoapods >= 1.6) - - skipImportValidation: Lint skips validating that the pod can be imported (available since cocoapods >= 1.3) - - skipTests: Lint skips building and running tests during validation (available since cocoapods >= 1.3) - - analyze: Validate with the Xcode Static Analysis tool (available since cocoapods >= 1.6.1) - - Test the syntax of your Podfile by linting the pod against the files of its directory - */ -func podLibLint(useBundleExec: Bool = true, - podspec: String? = nil, - verbose: Bool? = nil, - allowWarnings: Bool? = nil, - sources: [String]? = nil, - subspec: String? = nil, - includePodspecs: String? = nil, - externalPodspecs: String? = nil, - swiftVersion: String? = nil, - useLibraries: Bool = false, - useModularHeaders: Bool = false, - failFast: Bool = false, - private: Bool = false, - quick: Bool = false, - noClean: Bool = false, - noSubspecs: Bool = false, - platforms: String? = nil, - skipImportValidation: Bool = false, - skipTests: Bool = false, - analyze: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "pod_lib_lint", className: nil, args: [RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec), - RubyCommand.Argument(name: "podspec", value: podspec), - RubyCommand.Argument(name: "verbose", value: verbose), - RubyCommand.Argument(name: "allow_warnings", value: allowWarnings), - RubyCommand.Argument(name: "sources", value: sources), - RubyCommand.Argument(name: "subspec", value: subspec), - RubyCommand.Argument(name: "include_podspecs", value: includePodspecs), - RubyCommand.Argument(name: "external_podspecs", value: externalPodspecs), - RubyCommand.Argument(name: "swift_version", value: swiftVersion), - RubyCommand.Argument(name: "use_libraries", value: useLibraries), - RubyCommand.Argument(name: "use_modular_headers", value: useModularHeaders), - RubyCommand.Argument(name: "fail_fast", value: failFast), - RubyCommand.Argument(name: "private", value: `private`), - RubyCommand.Argument(name: "quick", value: quick), - RubyCommand.Argument(name: "no_clean", value: noClean), - RubyCommand.Argument(name: "no_subspecs", value: noSubspecs), - RubyCommand.Argument(name: "platforms", value: platforms), - RubyCommand.Argument(name: "skip_import_validation", value: skipImportValidation), - RubyCommand.Argument(name: "skip_tests", value: skipTests), - RubyCommand.Argument(name: "analyze", value: analyze)]) - _ = runner.executeCommand(command) -} - -/** - Push a Podspec to Trunk or a private repository - - - parameters: - - useBundleExec: Use bundle exec when there is a Gemfile presented - - path: The Podspec you want to push - - repo: The repo you want to push. Pushes to Trunk by default - - allowWarnings: Allow warnings during pod push - - useLibraries: Allow lint to use static libraries to install the spec - - sources: The sources of repos you want the pod spec to lint with, separated by commas - - swiftVersion: The SWIFT_VERSION that should be used to lint the spec. This takes precedence over a .swift-version file - - skipImportValidation: Lint skips validating that the pod can be imported - - skipTests: Lint skips building and running tests during validation - - verbose: Show more debugging information - - useModularHeaders: Use modular headers option during validation - - synchronous: If validation depends on other recently pushed pods, synchronize - */ -func podPush(useBundleExec: Bool = false, - path: String? = nil, - repo: String? = nil, - allowWarnings: Bool? = nil, - useLibraries: Bool? = nil, - sources: [String]? = nil, - swiftVersion: String? = nil, - skipImportValidation: Bool? = nil, - skipTests: Bool? = nil, - verbose: Bool = false, - useModularHeaders: Bool? = nil, - synchronous: Bool? = nil) { - let command = RubyCommand(commandID: "", methodName: "pod_push", className: nil, args: [RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "repo", value: repo), - RubyCommand.Argument(name: "allow_warnings", value: allowWarnings), - RubyCommand.Argument(name: "use_libraries", value: useLibraries), - RubyCommand.Argument(name: "sources", value: sources), - RubyCommand.Argument(name: "swift_version", value: swiftVersion), - RubyCommand.Argument(name: "skip_import_validation", value: skipImportValidation), - RubyCommand.Argument(name: "skip_tests", value: skipTests), - RubyCommand.Argument(name: "verbose", value: verbose), - RubyCommand.Argument(name: "use_modular_headers", value: useModularHeaders), - RubyCommand.Argument(name: "synchronous", value: synchronous)]) - _ = runner.executeCommand(command) -} - -/** - Creates or updates an item within your Podio app - - - parameters: - - clientId: Client ID for Podio API (see https://developers.podio.com/api-key) - - clientSecret: Client secret for Podio API (see https://developers.podio.com/api-key) - - appId: App ID of the app you intend to authenticate with (see https://developers.podio.com/authentication/app_auth) - - appToken: App token of the app you intend to authenticate with (see https://developers.podio.com/authentication/app_auth) - - identifyingField: String specifying the field key used for identification of an item - - identifyingValue: String uniquely specifying an item within the app - - otherFields: Dictionary of your app fields. Podio supports several field types, see https://developers.podio.com/doc/items - - Use this action to create or update an item within your Podio app (see [https://help.podio.com/hc/en-us/articles/201019278-Creating-apps-](https://help.podio.com/hc/en-us/articles/201019278-Creating-apps-)). - Pass in dictionary with field keys and their values. - Field key is located under `Modify app` -> `Advanced` -> `Developer` -> `External ID` (see [https://developers.podio.com/examples/items](https://developers.podio.com/examples/items)). - */ -func podioItem(clientId: String, - clientSecret: String, - appId: String, - appToken: String, - identifyingField: String, - identifyingValue: String, - otherFields: [String: Any]? = nil) { - let command = RubyCommand(commandID: "", methodName: "podio_item", className: nil, args: [RubyCommand.Argument(name: "client_id", value: clientId), - RubyCommand.Argument(name: "client_secret", value: clientSecret), - RubyCommand.Argument(name: "app_id", value: appId), - RubyCommand.Argument(name: "app_token", value: appToken), - RubyCommand.Argument(name: "identifying_field", value: identifyingField), - RubyCommand.Argument(name: "identifying_value", value: identifyingValue), - RubyCommand.Argument(name: "other_fields", value: otherFields)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `check_app_store_metadata` action - - - parameters: - - appIdentifier: The bundle identifier of your app - - username: Your Apple ID Username - - teamId: The ID of your App Store Connect team if you're in multiple teams - - teamName: The name of your App Store Connect team if you're in multiple teams - - defaultRuleLevel: The default rule level unless otherwise configured - - includeInAppPurchases: Should check in-app purchases? - - freeStuffInIap: using text indicating that your IAP is free - - - returns: true if precheck passes, else, false - - More information: https://fastlane.tools/precheck - */ -func precheck(appIdentifier: Any = precheckfile.appIdentifier, - username: Any = precheckfile.username, - teamId: Any? = precheckfile.teamId, - teamName: Any? = precheckfile.teamName, - defaultRuleLevel: Any = precheckfile.defaultRuleLevel, - includeInAppPurchases: Bool = precheckfile.includeInAppPurchases, - freeStuffInIap: Any? = precheckfile.freeStuffInIap) { - let command = RubyCommand(commandID: "", methodName: "precheck", className: nil, args: [RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "default_rule_level", value: defaultRuleLevel), - RubyCommand.Argument(name: "include_in_app_purchases", value: includeInAppPurchases), - RubyCommand.Argument(name: "free_stuff_in_iap", value: freeStuffInIap)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `puts` action - - - parameter message: Message to be printed out - */ -func println(message: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "println", className: nil, args: [RubyCommand.Argument(name: "message", value: message)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `create_app_online` action - - - parameters: - - username: Your Apple ID Username - - appIdentifier: App Identifier (Bundle ID, e.g. com.krausefx.app) - - bundleIdentifierSuffix: App Identifier Suffix (Ignored if App Identifier does not end with .*) - - appName: App Name - - appVersion: Initial version number (e.g. '1.0') - - sku: SKU Number (e.g. '1234') - - platform: The platform to use (optional) - - platforms: The platforms to use (optional) - - language: Primary Language (e.g. 'en-US', 'fr-FR') - - companyName: The name of your company. Only required if it's the first app you create - - skipItc: Skip the creation of the app on App Store Connect - - itcUsers: Array of App Store Connect users. If provided, you can limit access to this newly created app for users with the App Manager, Developer, Marketer or Sales roles - - enabledFeatures: **DEPRECATED!** Please use `enable_services` instead - Array with Spaceship App Services - - enableServices: Array with Spaceship App Services (e.g. access_wifi: (on|off), app_group: (on|off), apple_pay: (on|off), associated_domains: (on|off), auto_fill_credential: (on|off), data_protection: (complete|unlessopen|untilfirstauth), game_center: (on|off), health_kit: (on|off), home_kit: (on|off), hotspot: (on|off), icloud: (legacy|cloudkit), in_app_purchase: (on|off), inter_app_audio: (on|off), multipath: (on|off), network_extension: (on|off), nfc_tag_reading: (on|off), personal_vpn: (on|off), passbook: (on|off), push_notification: (on|off), siri_kit: (on|off), vpn_configuration: (on|off), wallet: (on|off), wireless_accessory: (on|off)) - - skipDevcenter: Skip the creation of the app on the Apple Developer Portal - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - itcTeamId: The ID of your App Store Connect team if you're in multiple teams - - itcTeamName: The name of your App Store Connect team if you're in multiple teams - - Create new apps on App Store Connect and Apple Developer Portal via _produce_. - If the app already exists, `create_app_online` will not do anything. - For more information about _produce_, visit its documentation page: [https://docs.fastlane.tools/actions/produce/](https://docs.fastlane.tools/actions/produce/). - */ -func produce(username: String, - appIdentifier: String, - bundleIdentifierSuffix: String? = nil, - appName: String, - appVersion: String? = nil, - sku: String, - platform: String = "ios", - platforms: [String]? = nil, - language: String = "English", - companyName: String? = nil, - skipItc: Bool = false, - itcUsers: [String]? = nil, - enabledFeatures: [String: Any] = [:], - enableServices: [String: Any] = [:], - skipDevcenter: Bool = false, - teamId: String? = nil, - teamName: String? = nil, - itcTeamId: Any? = nil, - itcTeamName: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "produce", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "bundle_identifier_suffix", value: bundleIdentifierSuffix), - RubyCommand.Argument(name: "app_name", value: appName), - RubyCommand.Argument(name: "app_version", value: appVersion), - RubyCommand.Argument(name: "sku", value: sku), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "platforms", value: platforms), - RubyCommand.Argument(name: "language", value: language), - RubyCommand.Argument(name: "company_name", value: companyName), - RubyCommand.Argument(name: "skip_itc", value: skipItc), - RubyCommand.Argument(name: "itc_users", value: itcUsers), - RubyCommand.Argument(name: "enabled_features", value: enabledFeatures), - RubyCommand.Argument(name: "enable_services", value: enableServices), - RubyCommand.Argument(name: "skip_devcenter", value: skipDevcenter), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "itc_team_id", value: itcTeamId), - RubyCommand.Argument(name: "itc_team_name", value: itcTeamName)]) - _ = runner.executeCommand(command) -} - -/** - Ask the user for a value or for confirmation - - - parameters: - - text: The text that will be displayed to the user - - ciInput: The default text that will be used when being executed on a CI service - - boolean: Is that a boolean question (yes/no)? This will add (y/n) at the end - - secureText: Is that a secure text (yes/no)? - - multiLineEndKeyword: Enable multi-line inputs by providing an end text (e.g. 'END') which will stop the user input - - You can use `prompt` to ask the user for a value or to just let the user confirm the next step. - When this is executed on a CI service, the passed `ci_input` value will be returned. - This action also supports multi-line inputs using the `multi_line_end_keyword` option. - */ -@discardableResult func prompt(text: String = "Please enter some text: ", - ciInput: String = "", - boolean: Bool = false, - secureText: Bool = false, - multiLineEndKeyword: String? = nil) -> String { - let command = RubyCommand(commandID: "", methodName: "prompt", className: nil, args: [RubyCommand.Argument(name: "text", value: text), - RubyCommand.Argument(name: "ci_input", value: ciInput), - RubyCommand.Argument(name: "boolean", value: boolean), - RubyCommand.Argument(name: "secure_text", value: secureText), - RubyCommand.Argument(name: "multi_line_end_keyword", value: multiLineEndKeyword)]) - return runner.executeCommand(command) -} - -/** - Push local tags to the remote - this will only push tags - - - parameters: - - force: Force push to remote - - remote: The remote to push tags to - - tag: The tag to push to remote - - If you only want to push the tags and nothing else, you can use the `push_git_tags` action - */ -func pushGitTags(force: Bool = false, - remote: String = "origin", - tag: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "push_git_tags", className: nil, args: [RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "remote", value: remote), - RubyCommand.Argument(name: "tag", value: tag)]) - _ = runner.executeCommand(command) -} - -/** - Push local changes to the remote branch - - - parameters: - - localBranch: The local branch to push from. Defaults to the current branch - - remoteBranch: The remote branch to push to. Defaults to the local branch - - force: Force push to remote - - forceWithLease: Force push with lease to remote - - tags: Whether tags are pushed to remote - - remote: The remote to push to - - noVerify: Whether or not to use --no-verify - - setUpstream: Whether or not to use --set-upstream - - Lets you push your local commits to a remote git repo. Useful if you make local changes such as adding a version bump commit (using `commit_version_bump`) or a git tag (using 'add_git_tag') on a CI server, and you want to push those changes back to your canonical/main repo. - If this is a new branch, use the `set_upstream` option to set the remote branch as upstream. - */ -func pushToGitRemote(localBranch: String? = nil, - remoteBranch: String? = nil, - force: Bool = false, - forceWithLease: Bool = false, - tags: Bool = true, - remote: String = "origin", - noVerify: Bool = false, - setUpstream: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "push_to_git_remote", className: nil, args: [RubyCommand.Argument(name: "local_branch", value: localBranch), - RubyCommand.Argument(name: "remote_branch", value: remoteBranch), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "force_with_lease", value: forceWithLease), - RubyCommand.Argument(name: "tags", value: tags), - RubyCommand.Argument(name: "remote", value: remote), - RubyCommand.Argument(name: "no_verify", value: noVerify), - RubyCommand.Argument(name: "set_upstream", value: setUpstream)]) - _ = runner.executeCommand(command) -} - -/** - Prints out the given text - - - parameter message: Message to be printed out - */ -func puts(message: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "puts", className: nil, args: [RubyCommand.Argument(name: "message", value: message)]) - _ = runner.executeCommand(command) -} - -/** - Loads a CocoaPods spec as JSON - - - parameter path: Path to the podspec to be read - - This can be used for only specifying a version string in your podspec - and during your release process you'd read it from the podspec by running `version = read_podspec['version']` at the beginning of your lane. - Loads the specified (or the first found) podspec in the folder as JSON, so that you can inspect its `version`, `files` etc. - This can be useful when basing your release process on the version string only stored in one place - in the podspec. - As one of the first steps you'd read the podspec and its version and the rest of the workflow can use that version string (when e.g. creating a new git tag or a GitHub Release). - */ -@discardableResult func readPodspec(path: String) -> [String: String] { - let command = RubyCommand(commandID: "", methodName: "read_podspec", className: nil, args: [RubyCommand.Argument(name: "path", value: path)]) - return parseDictionary(fromString: runner.executeCommand(command)) -} - -/** - Recreate not shared Xcode project schemes - - - parameter project: The Xcode project - */ -func recreateSchemes(project: String) { - let command = RubyCommand(commandID: "", methodName: "recreate_schemes", className: nil, args: [RubyCommand.Argument(name: "project", value: project)]) - _ = runner.executeCommand(command) -} - -/** - Registers a new device to the Apple Dev Portal - - - parameters: - - name: Provide the name of the device to register as - - udid: Provide the UDID of the device to register as - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - username: Optional: Your Apple ID - - This will register an iOS device with the Developer Portal so that you can include it in your provisioning profiles. - This is an optimistic action, in that it will only ever add a device to the member center. If the device has already been registered within the member center, it will be left alone in the member center. - The action will connect to the Apple Developer Portal using the username you specified in your `Appfile` with `apple_id`, but you can override it using the `:username` option. - */ -@discardableResult func registerDevice(name: String, - udid: String, - teamId: String? = nil, - teamName: String? = nil, - username: String) -> String { - let command = RubyCommand(commandID: "", methodName: "register_device", className: nil, args: [RubyCommand.Argument(name: "name", value: name), - RubyCommand.Argument(name: "udid", value: udid), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "username", value: username)]) - return runner.executeCommand(command) -} - -/** - Registers new devices to the Apple Dev Portal - - - parameters: - - devices: A hash of devices, with the name as key and the UDID as value - - devicesFile: Provide a path to a file with the devices to register. For the format of the file see the examples - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - username: Optional: Your Apple ID - - platform: The platform to use (optional) - - This will register iOS/Mac devices with the Developer Portal so that you can include them in your provisioning profiles. - This is an optimistic action, in that it will only ever add new devices to the member center, and never remove devices. If a device which has already been registered within the member center is not passed to this action, it will be left alone in the member center and continue to work. - The action will connect to the Apple Developer Portal using the username you specified in your `Appfile` with `apple_id`, but you can override it using the `username` option, or by setting the env variable `ENV['DELIVER_USER']`. - */ -func registerDevices(devices: [String: Any]? = nil, - devicesFile: String? = nil, - teamId: String? = nil, - teamName: String? = nil, - username: String, - platform: String = "ios") { - let command = RubyCommand(commandID: "", methodName: "register_devices", className: nil, args: [RubyCommand.Argument(name: "devices", value: devices), - RubyCommand.Argument(name: "devices_file", value: devicesFile), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "platform", value: platform)]) - _ = runner.executeCommand(command) -} - -/** - Resets git repo to a clean state by discarding uncommitted changes - - - parameters: - - files: Array of files the changes should be discarded. If not given, all files will be discarded - - force: Skip verifying of previously clean state of repo. Only recommended in combination with `files` option - - skipClean: Skip 'git clean' to avoid removing untracked files like `.env` - - disregardGitignore: Setting this to true will clean the whole repository, ignoring anything in your local .gitignore. Set this to true if you want the equivalent of a fresh clone, and for all untracked and ignore files to also be removed - - exclude: You can pass a string, or array of, file pattern(s) here which you want to have survive the cleaning process, and remain on disk, e.g. to leave the `artifacts` directory you would specify `exclude: 'artifacts'`. Make sure this pattern is also in your gitignore! See the gitignore documentation for info on patterns - - This action will reset your git repo to a clean state, discarding any uncommitted and untracked changes. Useful in case you need to revert the repo back to a clean state, e.g. after running _fastlane_. - Untracked files like `.env` will also be deleted, unless `:skip_clean` is true. - It's a pretty drastic action so it comes with a sort of safety latch. It will only proceed with the reset if this condition is met:| - | - >- You have called the `ensure_git_status_clean` action prior to calling this action. This ensures that your repo started off in a clean state, so the only things that will get destroyed by this action are files that are created as a byproduct of the fastlane run.| - >| - */ -func resetGitRepo(files: Any? = nil, - force: Bool = false, - skipClean: Bool = false, - disregardGitignore: Bool = true, - exclude: Any? = nil) { - let command = RubyCommand(commandID: "", methodName: "reset_git_repo", className: nil, args: [RubyCommand.Argument(name: "files", value: files), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "skip_clean", value: skipClean), - RubyCommand.Argument(name: "disregard_gitignore", value: disregardGitignore), - RubyCommand.Argument(name: "exclude", value: exclude)]) - _ = runner.executeCommand(command) -} - -/** - Shutdown and reset running simulators - - - parameters: - - ios: **DEPRECATED!** Use `:os_versions` instead - Which OS versions of Simulators you want to reset content and settings, this does not remove/recreate the simulators - - osVersions: Which OS versions of Simulators you want to reset content and settings, this does not remove/recreate the simulators - */ -func resetSimulatorContents(ios: [String]? = nil, - osVersions: [String]? = nil) { - let command = RubyCommand(commandID: "", methodName: "reset_simulator_contents", className: nil, args: [RubyCommand.Argument(name: "ios", value: ios), - RubyCommand.Argument(name: "os_versions", value: osVersions)]) - _ = runner.executeCommand(command) -} - -/** - Codesign an existing ipa file - - - parameters: - - ipa: Path to the ipa file to resign. Optional if you use the _gym_ or _xcodebuild_ action - - signingIdentity: Code signing identity to use. e.g. `iPhone Distribution: Luka Mirosevic (0123456789)` - - entitlements: Path to the entitlement file to use, e.g. `myApp/MyApp.entitlements` - - provisioningProfile: Path to your provisioning_profile. Optional if you use _sigh_ - - version: Version number to force resigned ipa to use. Updates both `CFBundleShortVersionString` and `CFBundleVersion` values in `Info.plist`. Applies for main app and all nested apps or extensions - - displayName: Display name to force resigned ipa to use - - shortVersion: Short version string to force resigned ipa to use (`CFBundleShortVersionString`) - - bundleVersion: Bundle version to force resigned ipa to use (`CFBundleVersion`) - - bundleId: Set new bundle ID during resign (`CFBundleIdentifier`) - - useAppEntitlements: Extract app bundle codesigning entitlements and combine with entitlements from new provisioning profile - - keychainPath: Provide a path to a keychain file that should be used by `/usr/bin/codesign` - */ -func resign(ipa: String, - signingIdentity: String, - entitlements: String? = nil, - provisioningProfile: Any, - version: String? = nil, - displayName: String? = nil, - shortVersion: String? = nil, - bundleVersion: String? = nil, - bundleId: String? = nil, - useAppEntitlements: Any? = nil, - keychainPath: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "resign", className: nil, args: [RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "signing_identity", value: signingIdentity), - RubyCommand.Argument(name: "entitlements", value: entitlements), - RubyCommand.Argument(name: "provisioning_profile", value: provisioningProfile), - RubyCommand.Argument(name: "version", value: version), - RubyCommand.Argument(name: "display_name", value: displayName), - RubyCommand.Argument(name: "short_version", value: shortVersion), - RubyCommand.Argument(name: "bundle_version", value: bundleVersion), - RubyCommand.Argument(name: "bundle_id", value: bundleId), - RubyCommand.Argument(name: "use_app_entitlements", value: useAppEntitlements), - RubyCommand.Argument(name: "keychain_path", value: keychainPath)]) - _ = runner.executeCommand(command) -} - -/** - This action restore your file that was backuped with the `backup_file` action - - - parameter path: Original file name you want to restore - */ -func restoreFile(path: String) { - let command = RubyCommand(commandID: "", methodName: "restore_file", className: nil, args: [RubyCommand.Argument(name: "path", value: path)]) - _ = runner.executeCommand(command) -} - -/** - Outputs ascii-art for a rocket 🚀 - - Print an ascii Rocket :rocket:. Useful after using _crashlytics_ or _pilot_ to indicate that your new build has been shipped to outer-space. - */ -@discardableResult func rocket() -> String { - let command = RubyCommand(commandID: "", methodName: "rocket", className: nil, args: []) - return runner.executeCommand(command) -} - -/** - Run tests using rspec - */ -func rspec() { - let command = RubyCommand(commandID: "", methodName: "rspec", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Rsync files from :source to :destination - - - parameters: - - extra: Port - - source: source file/folder - - destination: destination file/folder - - A wrapper around `rsync`, which is a tool that lets you synchronize files, including permissions and so on. For a more detailed information about `rsync`, please see [rsync(1) man page](https://linux.die.net/man/1/rsync). - */ -func rsync(extra: String = "-av", - source: String, - destination: String) { - let command = RubyCommand(commandID: "", methodName: "rsync", className: nil, args: [RubyCommand.Argument(name: "extra", value: extra), - RubyCommand.Argument(name: "source", value: source), - RubyCommand.Argument(name: "destination", value: destination)]) - _ = runner.executeCommand(command) -} - -/** - Runs the code style checks - */ -func rubocop() { - let command = RubyCommand(commandID: "", methodName: "rubocop", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Verifies the minimum ruby version required - - Add this to your `Fastfile` to require a certain version of _ruby_. - Put it at the top of your `Fastfile` to ensure that _fastlane_ is executed appropriately. - */ -func rubyVersion() { - let command = RubyCommand(commandID: "", methodName: "ruby_version", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Easily run tests of your iOS app (via _scan_) - - - parameters: - - workspace: Path to the workspace file - - project: Path to the project file - - scheme: The project's scheme. Make sure it's marked as `Shared` - - device: The name of the simulator type you want to run tests on (e.g. 'iPhone 6') - - devices: Array of devices to run the tests on (e.g. ['iPhone 6', 'iPad Air']) - - skipDetectDevices: Should skip auto detecting of devices if none were specified - - forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run - - resetSimulator: Enabling this option will automatically erase the simulator before running the application - - disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt - - prelaunchSimulator: Enabling this option will launch the first simulator prior to calling any xcodebuild command - - reinstallApp: Enabling this option will automatically uninstall the application before running it - - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app) - - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run - - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip - - testplan: The testplan associated with the scheme that should be used for testing - - onlyTestConfigurations: Array of strings matching test plan configurations to run - - skipTestConfigurations: Array of strings matching test plan configurations to skip - - xctestrun: Run tests using the provided `.xctestrun` file - - toolchain: The toolchain that should be used for building the application (e.g. `com.apple.dt.toolchain.Swift_2_3, org.swift.30p620160816a`) - - clean: Should the project be cleaned before building it? - - codeCoverage: Should code coverage be generated? (Xcode 7 and up) - - addressSanitizer: Should the address sanitizer be turned on? - - threadSanitizer: Should the thread sanitizer be turned on? - - openReport: Should the HTML report be opened when tests are completed? - - disableXcpretty: Disable xcpretty formatting of build, similar to `output_style='raw'` but this will also skip the test results table - - outputDirectory: The directory in which all reports will be stored - - outputStyle: Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty during xcodebuild) - - outputTypes: Comma separated list of the output types (e.g. html, junit, json-compilation-database) - - outputFiles: Comma separated list of the output files, corresponding to the types provided by :output_types (order should match). If specifying an output type of json-compilation-database with :use_clang_report_name enabled, that option will take precedence - - buildlogPath: The directory where to store the raw log - - includeSimulatorLogs: If the logs generated by the app (e.g. using NSLog, perror, etc.) in the Simulator should be written to the output_directory - - suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path - - formatter: A custom xcpretty formatter to use - - xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf') - - derivedDataPath: The directory where build products and other derived data will go - - shouldZipBuildProducts: Should zip the derived data build products and place in output path? - - resultBundle: Should an Xcode result bundle be generated in the output directory - - useClangReportName: Generate the json compilation database with clang naming convention (compile_commands.json) - - concurrentWorkers: Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count - - maxConcurrentSimulators: Constrain the number of simulator devices on which to test concurrently. Equivalent to -maximum-concurrent-test-simulator-destinations - - disableConcurrentTesting: Do not run test bundles in parallel on the specified destinations. Testing will occur on each destination serially. Equivalent to -disable-concurrent-testing - - skipBuild: Should debug build be skipped before test build? - - testWithoutBuilding: Test without building, requires a derived data path - - buildForTesting: Build for testing only, does not run tests - - sdk: The SDK that should be used for building the application - - configuration: The configuration to use when building the app. Defaults to 'Release' - - xcargs: Pass additional arguments to xcodebuild. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - xcconfig: Use an extra XCCONFIG file to build your app - - appName: App name to use in slack message and logfile name - - deploymentTargetVersion: Target version of the app being build or tested. Used to filter out simulator version - - slackUrl: Create an Incoming WebHook for your Slack group to post results there - - slackChannel: #channel or @username - - slackMessage: The message included with each message posted to slack - - slackUseWebhookConfiguredUsernameAndIcon: Use webhook's default username and icon settings? (true/false) - - slackUsername: Overrides the webhook's username property if slack_use_webhook_configured_username_and_icon is false - - slackIconUrl: Overrides the webhook's image property if slack_use_webhook_configured_username_and_icon is false - - skipSlack: Don't publish to slack, even when an URL is given - - slackOnlyOnFailure: Only post on Slack if the tests fail - - destination: Use only if you're a pro, use the other options instead - - customReportFileName: **DEPRECATED!** Use `--output_files` instead - Sets custom full report file name when generating a single report - - xcodebuildCommand: Allows for override of the default `xcodebuild` command - - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies - - failBuild: Should this step stop the build if the tests fail? Set this to false if you're using trainer - - More information: https://docs.fastlane.tools/actions/scan/ - */ -func runTests(workspace: String? = nil, - project: String? = nil, - scheme: String? = nil, - device: String? = nil, - devices: [String]? = nil, - skipDetectDevices: Bool = false, - forceQuitSimulator: Bool = false, - resetSimulator: Bool = false, - disableSlideToType: Bool = true, - prelaunchSimulator: Bool? = nil, - reinstallApp: Bool = false, - appIdentifier: String? = nil, - onlyTesting: Any? = nil, - skipTesting: Any? = nil, - testplan: String? = nil, - onlyTestConfigurations: Any? = nil, - skipTestConfigurations: Any? = nil, - xctestrun: String? = nil, - toolchain: Any? = nil, - clean: Bool = false, - codeCoverage: Bool? = nil, - addressSanitizer: Bool? = nil, - threadSanitizer: Bool? = nil, - openReport: Bool = false, - disableXcpretty: Bool? = nil, - outputDirectory: String = "./test_output", - outputStyle: String? = nil, - outputTypes: String = "html,junit", - outputFiles: String? = nil, - buildlogPath: String = "~/Library/Logs/scan", - includeSimulatorLogs: Bool = false, - suppressXcodeOutput: Bool? = nil, - formatter: String? = nil, - xcprettyArgs: String? = nil, - derivedDataPath: String? = nil, - shouldZipBuildProducts: Bool = false, - resultBundle: Bool = false, - useClangReportName: Bool = false, - concurrentWorkers: Int? = nil, - maxConcurrentSimulators: Int? = nil, - disableConcurrentTesting: Bool = false, - skipBuild: Bool = false, - testWithoutBuilding: Bool? = nil, - buildForTesting: Bool? = nil, - sdk: String? = nil, - configuration: String? = nil, - xcargs: String? = nil, - xcconfig: String? = nil, - appName: String? = nil, - deploymentTargetVersion: String? = nil, - slackUrl: String? = nil, - slackChannel: String? = nil, - slackMessage: String? = nil, - slackUseWebhookConfiguredUsernameAndIcon: Bool = false, - slackUsername: String = "fastlane", - slackIconUrl: String = "https://fastlane.tools/assets/img/fastlane_icon.png", - skipSlack: Bool = false, - slackOnlyOnFailure: Bool = false, - destination: Any? = nil, - customReportFileName: String? = nil, - xcodebuildCommand: String = "env NSUnbufferedIO=YES xcodebuild", - clonedSourcePackagesPath: String? = nil, - failBuild: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "run_tests", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "project", value: project), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "device", value: device), - RubyCommand.Argument(name: "devices", value: devices), - RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices), - RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator), - RubyCommand.Argument(name: "reset_simulator", value: resetSimulator), - RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType), - RubyCommand.Argument(name: "prelaunch_simulator", value: prelaunchSimulator), - RubyCommand.Argument(name: "reinstall_app", value: reinstallApp), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "only_testing", value: onlyTesting), - RubyCommand.Argument(name: "skip_testing", value: skipTesting), - RubyCommand.Argument(name: "testplan", value: testplan), - RubyCommand.Argument(name: "only_test_configurations", value: onlyTestConfigurations), - RubyCommand.Argument(name: "skip_test_configurations", value: skipTestConfigurations), - RubyCommand.Argument(name: "xctestrun", value: xctestrun), - RubyCommand.Argument(name: "toolchain", value: toolchain), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "code_coverage", value: codeCoverage), - RubyCommand.Argument(name: "address_sanitizer", value: addressSanitizer), - RubyCommand.Argument(name: "thread_sanitizer", value: threadSanitizer), - RubyCommand.Argument(name: "open_report", value: openReport), - RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "output_style", value: outputStyle), - RubyCommand.Argument(name: "output_types", value: outputTypes), - RubyCommand.Argument(name: "output_files", value: outputFiles), - RubyCommand.Argument(name: "buildlog_path", value: buildlogPath), - RubyCommand.Argument(name: "include_simulator_logs", value: includeSimulatorLogs), - RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput), - RubyCommand.Argument(name: "formatter", value: formatter), - RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs), - RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath), - RubyCommand.Argument(name: "should_zip_build_products", value: shouldZipBuildProducts), - RubyCommand.Argument(name: "result_bundle", value: resultBundle), - RubyCommand.Argument(name: "use_clang_report_name", value: useClangReportName), - RubyCommand.Argument(name: "concurrent_workers", value: concurrentWorkers), - RubyCommand.Argument(name: "max_concurrent_simulators", value: maxConcurrentSimulators), - RubyCommand.Argument(name: "disable_concurrent_testing", value: disableConcurrentTesting), - RubyCommand.Argument(name: "skip_build", value: skipBuild), - RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding), - RubyCommand.Argument(name: "build_for_testing", value: buildForTesting), - RubyCommand.Argument(name: "sdk", value: sdk), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "xcargs", value: xcargs), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "app_name", value: appName), - RubyCommand.Argument(name: "deployment_target_version", value: deploymentTargetVersion), - RubyCommand.Argument(name: "slack_url", value: slackUrl), - RubyCommand.Argument(name: "slack_channel", value: slackChannel), - RubyCommand.Argument(name: "slack_message", value: slackMessage), - RubyCommand.Argument(name: "slack_use_webhook_configured_username_and_icon", value: slackUseWebhookConfiguredUsernameAndIcon), - RubyCommand.Argument(name: "slack_username", value: slackUsername), - RubyCommand.Argument(name: "slack_icon_url", value: slackIconUrl), - RubyCommand.Argument(name: "skip_slack", value: skipSlack), - RubyCommand.Argument(name: "slack_only_on_failure", value: slackOnlyOnFailure), - RubyCommand.Argument(name: "destination", value: destination), - RubyCommand.Argument(name: "custom_report_file_name", value: customReportFileName), - RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand), - RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath), - RubyCommand.Argument(name: "fail_build", value: failBuild)]) - _ = runner.executeCommand(command) -} - -/** - Generates a plist file and uploads all to AWS S3 - - - parameters: - - ipa: .ipa file for the build - - dsym: zipped .dsym package for the build - - uploadMetadata: Upload relevant metadata for this build - - plistTemplatePath: plist template path - - plistFileName: uploaded plist filename - - htmlTemplatePath: html erb template path - - htmlFileName: uploaded html filename - - versionTemplatePath: version erb template path - - versionFileName: uploaded version filename - - accessKey: AWS Access Key ID - - secretAccessKey: AWS Secret Access Key - - bucket: AWS bucket name - - region: AWS region (for bucket creation) - - path: S3 'path'. Values from Info.plist will be substituted for keys wrapped in {} - - source: Optional source directory e.g. ./build - - acl: Uploaded object permissions e.g public_read (default), private, public_read_write, authenticated_read - - Upload a new build to Amazon S3 to distribute the build to beta testers. - Works for both Ad Hoc and Enterprise signed applications. This step will generate the necessary HTML, plist, and version files for you. - It is recommended to **not** store the AWS access keys in the `Fastfile`. The uploaded `version.json` file provides an easy way for apps to poll if a new update is available. - */ -func s3(ipa: String? = nil, - dsym: String? = nil, - uploadMetadata: Bool = true, - plistTemplatePath: String? = nil, - plistFileName: String? = nil, - htmlTemplatePath: String? = nil, - htmlFileName: String? = nil, - versionTemplatePath: String? = nil, - versionFileName: String? = nil, - accessKey: String? = nil, - secretAccessKey: String? = nil, - bucket: String? = nil, - region: String? = nil, - path: String = "v{CFBundleShortVersionString}_b{CFBundleVersion}/", - source: String? = nil, - acl: String = "public_read") { - let command = RubyCommand(commandID: "", methodName: "s3", className: nil, args: [RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "dsym", value: dsym), - RubyCommand.Argument(name: "upload_metadata", value: uploadMetadata), - RubyCommand.Argument(name: "plist_template_path", value: plistTemplatePath), - RubyCommand.Argument(name: "plist_file_name", value: plistFileName), - RubyCommand.Argument(name: "html_template_path", value: htmlTemplatePath), - RubyCommand.Argument(name: "html_file_name", value: htmlFileName), - RubyCommand.Argument(name: "version_template_path", value: versionTemplatePath), - RubyCommand.Argument(name: "version_file_name", value: versionFileName), - RubyCommand.Argument(name: "access_key", value: accessKey), - RubyCommand.Argument(name: "secret_access_key", value: secretAccessKey), - RubyCommand.Argument(name: "bucket", value: bucket), - RubyCommand.Argument(name: "region", value: region), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "source", value: source), - RubyCommand.Argument(name: "acl", value: acl)]) - _ = runner.executeCommand(command) -} - -/** - This action speaks the given text out loud - - - parameters: - - text: Text to be spoken out loud (as string or array of strings) - - mute: If say should be muted with text printed out - */ -func say(text: Any, - mute: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "say", className: nil, args: [RubyCommand.Argument(name: "text", value: text), - RubyCommand.Argument(name: "mute", value: mute)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `run_tests` action - - - parameters: - - workspace: Path to the workspace file - - project: Path to the project file - - scheme: The project's scheme. Make sure it's marked as `Shared` - - device: The name of the simulator type you want to run tests on (e.g. 'iPhone 6') - - devices: Array of devices to run the tests on (e.g. ['iPhone 6', 'iPad Air']) - - skipDetectDevices: Should skip auto detecting of devices if none were specified - - forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run - - resetSimulator: Enabling this option will automatically erase the simulator before running the application - - disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt - - prelaunchSimulator: Enabling this option will launch the first simulator prior to calling any xcodebuild command - - reinstallApp: Enabling this option will automatically uninstall the application before running it - - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app) - - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run - - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip - - testplan: The testplan associated with the scheme that should be used for testing - - onlyTestConfigurations: Array of strings matching test plan configurations to run - - skipTestConfigurations: Array of strings matching test plan configurations to skip - - xctestrun: Run tests using the provided `.xctestrun` file - - toolchain: The toolchain that should be used for building the application (e.g. `com.apple.dt.toolchain.Swift_2_3, org.swift.30p620160816a`) - - clean: Should the project be cleaned before building it? - - codeCoverage: Should code coverage be generated? (Xcode 7 and up) - - addressSanitizer: Should the address sanitizer be turned on? - - threadSanitizer: Should the thread sanitizer be turned on? - - openReport: Should the HTML report be opened when tests are completed? - - disableXcpretty: Disable xcpretty formatting of build, similar to `output_style='raw'` but this will also skip the test results table - - outputDirectory: The directory in which all reports will be stored - - outputStyle: Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty during xcodebuild) - - outputTypes: Comma separated list of the output types (e.g. html, junit, json-compilation-database) - - outputFiles: Comma separated list of the output files, corresponding to the types provided by :output_types (order should match). If specifying an output type of json-compilation-database with :use_clang_report_name enabled, that option will take precedence - - buildlogPath: The directory where to store the raw log - - includeSimulatorLogs: If the logs generated by the app (e.g. using NSLog, perror, etc.) in the Simulator should be written to the output_directory - - suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path - - formatter: A custom xcpretty formatter to use - - xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf') - - derivedDataPath: The directory where build products and other derived data will go - - shouldZipBuildProducts: Should zip the derived data build products and place in output path? - - resultBundle: Should an Xcode result bundle be generated in the output directory - - useClangReportName: Generate the json compilation database with clang naming convention (compile_commands.json) - - concurrentWorkers: Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count - - maxConcurrentSimulators: Constrain the number of simulator devices on which to test concurrently. Equivalent to -maximum-concurrent-test-simulator-destinations - - disableConcurrentTesting: Do not run test bundles in parallel on the specified destinations. Testing will occur on each destination serially. Equivalent to -disable-concurrent-testing - - skipBuild: Should debug build be skipped before test build? - - testWithoutBuilding: Test without building, requires a derived data path - - buildForTesting: Build for testing only, does not run tests - - sdk: The SDK that should be used for building the application - - configuration: The configuration to use when building the app. Defaults to 'Release' - - xcargs: Pass additional arguments to xcodebuild. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - xcconfig: Use an extra XCCONFIG file to build your app - - appName: App name to use in slack message and logfile name - - deploymentTargetVersion: Target version of the app being build or tested. Used to filter out simulator version - - slackUrl: Create an Incoming WebHook for your Slack group to post results there - - slackChannel: #channel or @username - - slackMessage: The message included with each message posted to slack - - slackUseWebhookConfiguredUsernameAndIcon: Use webhook's default username and icon settings? (true/false) - - slackUsername: Overrides the webhook's username property if slack_use_webhook_configured_username_and_icon is false - - slackIconUrl: Overrides the webhook's image property if slack_use_webhook_configured_username_and_icon is false - - skipSlack: Don't publish to slack, even when an URL is given - - slackOnlyOnFailure: Only post on Slack if the tests fail - - destination: Use only if you're a pro, use the other options instead - - customReportFileName: **DEPRECATED!** Use `--output_files` instead - Sets custom full report file name when generating a single report - - xcodebuildCommand: Allows for override of the default `xcodebuild` command - - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies - - failBuild: Should this step stop the build if the tests fail? Set this to false if you're using trainer - - More information: https://docs.fastlane.tools/actions/scan/ - */ -func scan(workspace: Any? = scanfile.workspace, - project: Any? = scanfile.project, - scheme: Any? = scanfile.scheme, - device: Any? = scanfile.device, - devices: [String]? = scanfile.devices, - skipDetectDevices: Bool = scanfile.skipDetectDevices, - forceQuitSimulator: Bool = scanfile.forceQuitSimulator, - resetSimulator: Bool = scanfile.resetSimulator, - disableSlideToType: Bool = scanfile.disableSlideToType, - prelaunchSimulator: Bool? = scanfile.prelaunchSimulator, - reinstallApp: Bool = scanfile.reinstallApp, - appIdentifier: Any? = scanfile.appIdentifier, - onlyTesting: Any? = scanfile.onlyTesting, - skipTesting: Any? = scanfile.skipTesting, - testplan: Any? = scanfile.testplan, - onlyTestConfigurations: Any? = scanfile.onlyTestConfigurations, - skipTestConfigurations: Any? = scanfile.skipTestConfigurations, - xctestrun: Any? = scanfile.xctestrun, - toolchain: Any? = scanfile.toolchain, - clean: Bool = scanfile.clean, - codeCoverage: Bool? = scanfile.codeCoverage, - addressSanitizer: Bool? = scanfile.addressSanitizer, - threadSanitizer: Bool? = scanfile.threadSanitizer, - openReport: Bool = scanfile.openReport, - disableXcpretty: Bool? = scanfile.disableXcpretty, - outputDirectory: Any = scanfile.outputDirectory, - outputStyle: Any? = scanfile.outputStyle, - outputTypes: Any = scanfile.outputTypes, - outputFiles: Any? = scanfile.outputFiles, - buildlogPath: Any = scanfile.buildlogPath, - includeSimulatorLogs: Bool = scanfile.includeSimulatorLogs, - suppressXcodeOutput: Bool? = scanfile.suppressXcodeOutput, - formatter: Any? = scanfile.formatter, - xcprettyArgs: Any? = scanfile.xcprettyArgs, - derivedDataPath: Any? = scanfile.derivedDataPath, - shouldZipBuildProducts: Bool = scanfile.shouldZipBuildProducts, - resultBundle: Bool = scanfile.resultBundle, - useClangReportName: Bool = scanfile.useClangReportName, - concurrentWorkers: Int? = scanfile.concurrentWorkers, - maxConcurrentSimulators: Int? = scanfile.maxConcurrentSimulators, - disableConcurrentTesting: Bool = scanfile.disableConcurrentTesting, - skipBuild: Bool = scanfile.skipBuild, - testWithoutBuilding: Bool? = scanfile.testWithoutBuilding, - buildForTesting: Bool? = scanfile.buildForTesting, - sdk: Any? = scanfile.sdk, - configuration: Any? = scanfile.configuration, - xcargs: Any? = scanfile.xcargs, - xcconfig: Any? = scanfile.xcconfig, - appName: Any? = scanfile.appName, - deploymentTargetVersion: Any? = scanfile.deploymentTargetVersion, - slackUrl: Any? = scanfile.slackUrl, - slackChannel: Any? = scanfile.slackChannel, - slackMessage: Any? = scanfile.slackMessage, - slackUseWebhookConfiguredUsernameAndIcon: Bool = scanfile.slackUseWebhookConfiguredUsernameAndIcon, - slackUsername: Any = scanfile.slackUsername, - slackIconUrl: Any = scanfile.slackIconUrl, - skipSlack: Bool = scanfile.skipSlack, - slackOnlyOnFailure: Bool = scanfile.slackOnlyOnFailure, - destination: Any? = scanfile.destination, - customReportFileName: Any? = scanfile.customReportFileName, - xcodebuildCommand: Any = scanfile.xcodebuildCommand, - clonedSourcePackagesPath: Any? = scanfile.clonedSourcePackagesPath, - failBuild: Bool = scanfile.failBuild) { - let command = RubyCommand(commandID: "", methodName: "scan", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "project", value: project), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "device", value: device), - RubyCommand.Argument(name: "devices", value: devices), - RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices), - RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator), - RubyCommand.Argument(name: "reset_simulator", value: resetSimulator), - RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType), - RubyCommand.Argument(name: "prelaunch_simulator", value: prelaunchSimulator), - RubyCommand.Argument(name: "reinstall_app", value: reinstallApp), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "only_testing", value: onlyTesting), - RubyCommand.Argument(name: "skip_testing", value: skipTesting), - RubyCommand.Argument(name: "testplan", value: testplan), - RubyCommand.Argument(name: "only_test_configurations", value: onlyTestConfigurations), - RubyCommand.Argument(name: "skip_test_configurations", value: skipTestConfigurations), - RubyCommand.Argument(name: "xctestrun", value: xctestrun), - RubyCommand.Argument(name: "toolchain", value: toolchain), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "code_coverage", value: codeCoverage), - RubyCommand.Argument(name: "address_sanitizer", value: addressSanitizer), - RubyCommand.Argument(name: "thread_sanitizer", value: threadSanitizer), - RubyCommand.Argument(name: "open_report", value: openReport), - RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "output_style", value: outputStyle), - RubyCommand.Argument(name: "output_types", value: outputTypes), - RubyCommand.Argument(name: "output_files", value: outputFiles), - RubyCommand.Argument(name: "buildlog_path", value: buildlogPath), - RubyCommand.Argument(name: "include_simulator_logs", value: includeSimulatorLogs), - RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput), - RubyCommand.Argument(name: "formatter", value: formatter), - RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs), - RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath), - RubyCommand.Argument(name: "should_zip_build_products", value: shouldZipBuildProducts), - RubyCommand.Argument(name: "result_bundle", value: resultBundle), - RubyCommand.Argument(name: "use_clang_report_name", value: useClangReportName), - RubyCommand.Argument(name: "concurrent_workers", value: concurrentWorkers), - RubyCommand.Argument(name: "max_concurrent_simulators", value: maxConcurrentSimulators), - RubyCommand.Argument(name: "disable_concurrent_testing", value: disableConcurrentTesting), - RubyCommand.Argument(name: "skip_build", value: skipBuild), - RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding), - RubyCommand.Argument(name: "build_for_testing", value: buildForTesting), - RubyCommand.Argument(name: "sdk", value: sdk), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "xcargs", value: xcargs), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "app_name", value: appName), - RubyCommand.Argument(name: "deployment_target_version", value: deploymentTargetVersion), - RubyCommand.Argument(name: "slack_url", value: slackUrl), - RubyCommand.Argument(name: "slack_channel", value: slackChannel), - RubyCommand.Argument(name: "slack_message", value: slackMessage), - RubyCommand.Argument(name: "slack_use_webhook_configured_username_and_icon", value: slackUseWebhookConfiguredUsernameAndIcon), - RubyCommand.Argument(name: "slack_username", value: slackUsername), - RubyCommand.Argument(name: "slack_icon_url", value: slackIconUrl), - RubyCommand.Argument(name: "skip_slack", value: skipSlack), - RubyCommand.Argument(name: "slack_only_on_failure", value: slackOnlyOnFailure), - RubyCommand.Argument(name: "destination", value: destination), - RubyCommand.Argument(name: "custom_report_file_name", value: customReportFileName), - RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand), - RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath), - RubyCommand.Argument(name: "fail_build", value: failBuild)]) - _ = runner.executeCommand(command) -} - -/** - Transfer files via SCP - - - parameters: - - username: Username - - password: Password - - host: Hostname - - port: Port - - upload: Upload - - download: Download - */ -func scp(username: String, - password: String? = nil, - host: String, - port: String = "22", - upload: [String: Any]? = nil, - download: [String: Any]? = nil) { - let command = RubyCommand(commandID: "", methodName: "scp", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "password", value: password), - RubyCommand.Argument(name: "host", value: host), - RubyCommand.Argument(name: "port", value: port), - RubyCommand.Argument(name: "upload", value: upload), - RubyCommand.Argument(name: "download", value: download)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `capture_android_screenshots` action - - - parameters: - - androidHome: Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx - - buildToolsVersion: The Android build tools version to use, e.g. '23.0.2' - - locales: A list of locales which should be used - - clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running screengrab - - outputDirectory: The directory where to store the screenshots - - skipOpenSummary: Don't open the summary after running _screengrab_ - - appPackageName: The package name of the app under test (e.g. com.yourcompany.yourapp) - - testsPackageName: The package name of the tests bundle (e.g. com.yourcompany.yourapp.test) - - useTestsInPackages: Only run tests in these Java packages - - useTestsInClasses: Only run tests in these Java classes - - launchArguments: Additional launch arguments - - testInstrumentationRunner: The fully qualified class name of your test instrumentation runner - - endingLocale: Return the device to this locale after running tests - - useAdbRoot: Restarts the adb daemon using `adb root` to allow access to screenshots directories on device. Use if getting 'Permission denied' errors - - appApkPath: The path to the APK for the app under test - - testsApkPath: The path to the APK for the the tests bundle - - specificDevice: Use the device or emulator with the given serial number or qualifier - - deviceType: Type of device used for screenshots. Matches Google Play Types (phone, sevenInch, tenInch, tv, wear) - - exitOnTestFailure: Whether or not to exit Screengrab on test failure. Exiting on failure will not copy sceenshots to local machine nor open sceenshots summary - - reinstallApp: Enabling this option will automatically uninstall the application before running it - - useTimestampSuffix: Add timestamp suffix to screenshot filename - - adbHost: Configure the host used by adb to connect, allows running on remote devices farm - */ -func screengrab(androidHome: Any? = screengrabfile.androidHome, - buildToolsVersion: Any? = screengrabfile.buildToolsVersion, - locales: [String] = screengrabfile.locales, - clearPreviousScreenshots: Bool = screengrabfile.clearPreviousScreenshots, - outputDirectory: Any = screengrabfile.outputDirectory, - skipOpenSummary: Bool = screengrabfile.skipOpenSummary, - appPackageName: Any = screengrabfile.appPackageName, - testsPackageName: Any? = screengrabfile.testsPackageName, - useTestsInPackages: [String]? = screengrabfile.useTestsInPackages, - useTestsInClasses: [String]? = screengrabfile.useTestsInClasses, - launchArguments: [String]? = screengrabfile.launchArguments, - testInstrumentationRunner: Any = screengrabfile.testInstrumentationRunner, - endingLocale: Any = screengrabfile.endingLocale, - useAdbRoot: Bool = screengrabfile.useAdbRoot, - appApkPath: Any? = screengrabfile.appApkPath, - testsApkPath: Any? = screengrabfile.testsApkPath, - specificDevice: Any? = screengrabfile.specificDevice, - deviceType: Any = screengrabfile.deviceType, - exitOnTestFailure: Bool = screengrabfile.exitOnTestFailure, - reinstallApp: Bool = screengrabfile.reinstallApp, - useTimestampSuffix: Bool = screengrabfile.useTimestampSuffix, - adbHost: Any? = screengrabfile.adbHost) { - let command = RubyCommand(commandID: "", methodName: "screengrab", className: nil, args: [RubyCommand.Argument(name: "android_home", value: androidHome), - RubyCommand.Argument(name: "build_tools_version", value: buildToolsVersion), - RubyCommand.Argument(name: "locales", value: locales), - RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "skip_open_summary", value: skipOpenSummary), - RubyCommand.Argument(name: "app_package_name", value: appPackageName), - RubyCommand.Argument(name: "tests_package_name", value: testsPackageName), - RubyCommand.Argument(name: "use_tests_in_packages", value: useTestsInPackages), - RubyCommand.Argument(name: "use_tests_in_classes", value: useTestsInClasses), - RubyCommand.Argument(name: "launch_arguments", value: launchArguments), - RubyCommand.Argument(name: "test_instrumentation_runner", value: testInstrumentationRunner), - RubyCommand.Argument(name: "ending_locale", value: endingLocale), - RubyCommand.Argument(name: "use_adb_root", value: useAdbRoot), - RubyCommand.Argument(name: "app_apk_path", value: appApkPath), - RubyCommand.Argument(name: "tests_apk_path", value: testsApkPath), - RubyCommand.Argument(name: "specific_device", value: specificDevice), - RubyCommand.Argument(name: "device_type", value: deviceType), - RubyCommand.Argument(name: "exit_on_test_failure", value: exitOnTestFailure), - RubyCommand.Argument(name: "reinstall_app", value: reinstallApp), - RubyCommand.Argument(name: "use_timestamp_suffix", value: useTimestampSuffix), - RubyCommand.Argument(name: "adb_host", value: adbHost)]) - _ = runner.executeCommand(command) -} - -/** - Set the build number from the current repository - - - parameters: - - useHgRevisionNumber: Use hg revision number instead of hash (ignored for non-hg repos) - - xcodeproj: explicitly specify which xcodeproj to use - - This action will set the **build number** according to what the SCM HEAD reports. - Currently supported SCMs are svn (uses root revision), git-svn (uses svn revision) and git (uses short hash) and mercurial (uses short hash or revision number). - There is an option, `:use_hg_revision_number`, which allows to use mercurial revision number instead of hash. - */ -func setBuildNumberRepository(useHgRevisionNumber: Bool = false, - xcodeproj: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "set_build_number_repository", className: nil, args: [RubyCommand.Argument(name: "use_hg_revision_number", value: useHgRevisionNumber), - RubyCommand.Argument(name: "xcodeproj", value: xcodeproj)]) - _ = runner.executeCommand(command) -} - -/** - Set the changelog for all languages on App Store Connect - - - parameters: - - appIdentifier: The bundle identifier of your app - - username: Your Apple ID Username - - version: The version number to create/update - - changelog: Changelog text that should be uploaded to App Store Connect - - teamId: The ID of your App Store Connect team if you're in multiple teams - - teamName: The name of your App Store Connect team if you're in multiple teams - - platform: The platform of the app (ios, appletvos, mac) - - This is useful if you have only one changelog for all languages. - You can store the changelog in `./changelog.txt` and it will automatically get loaded from there. This integration is useful if you support e.g. 10 languages and want to use the same "What's new"-text for all languages. - Defining the version is optional. _fastlane_ will try to automatically detect it if you don't provide one. - */ -func setChangelog(appIdentifier: String, - username: String, - version: String? = nil, - changelog: String? = nil, - teamId: Any? = nil, - teamName: String? = nil, - platform: String = "ios") { - let command = RubyCommand(commandID: "", methodName: "set_changelog", className: nil, args: [RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "version", value: version), - RubyCommand.Argument(name: "changelog", value: changelog), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "platform", value: platform)]) - _ = runner.executeCommand(command) -} - -/** - This will create a new release on GitHub and upload assets for it - - - parameters: - - repositoryName: The path to your repo, e.g. 'fastlane/fastlane' - - serverUrl: The server url. e.g. 'https://your.internal.github.host/api/v3' (Default: 'https://api.github.com') - - apiToken: Personal API Token for GitHub - generate one at https://github.com/settings/tokens - - tagName: Pass in the tag name - - name: Name of this release - - commitish: Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually master) - - description: Description of this release - - isDraft: Whether the release should be marked as draft - - isPrerelease: Whether the release should be marked as prerelease - - uploadAssets: Path to assets to be uploaded with the release - - - returns: A hash containing all relevant information of this release - Access things like 'html_url', 'tag_name', 'name', 'body' - - Creates a new release on GitHub. You must provide your GitHub Personal token (get one from [https://github.com/settings/tokens/new](https://github.com/settings/tokens/new)), the repository name and tag name. By default, that's `master`. - If the tag doesn't exist, one will be created on the commit or branch passed in as commitish. - Out parameters provide the release's id, which can be used for later editing and the release HTML link to GitHub. You can also specify a list of assets to be uploaded to the release with the `:upload_assets` parameter. - */ -@discardableResult func setGithubRelease(repositoryName: String, - serverUrl: String = "https://api.github.com", - apiToken: String, - tagName: String, - name: String? = nil, - commitish: String? = nil, - description: String? = nil, - isDraft: Bool = false, - isPrerelease: Bool = false, - uploadAssets: [String]? = nil) -> [String: Any] { - let command = RubyCommand(commandID: "", methodName: "set_github_release", className: nil, args: [RubyCommand.Argument(name: "repository_name", value: repositoryName), - RubyCommand.Argument(name: "server_url", value: serverUrl), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "tag_name", value: tagName), - RubyCommand.Argument(name: "name", value: name), - RubyCommand.Argument(name: "commitish", value: commitish), - RubyCommand.Argument(name: "description", value: description), - RubyCommand.Argument(name: "is_draft", value: isDraft), - RubyCommand.Argument(name: "is_prerelease", value: isPrerelease), - RubyCommand.Argument(name: "upload_assets", value: uploadAssets)]) - return parseDictionary(fromString: runner.executeCommand(command)) -} - -/** - Sets value to Info.plist of your project as native Ruby data structures - - - parameters: - - key: Name of key in plist - - subkey: Name of subkey in plist - - value: Value to setup - - path: Path to plist file you want to update - - outputFileName: Path to the output file you want to generate - */ -func setInfoPlistValue(key: String, - subkey: String? = nil, - value: Any, - path: String, - outputFileName: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "set_info_plist_value", className: nil, args: [RubyCommand.Argument(name: "key", value: key), - RubyCommand.Argument(name: "subkey", value: subkey), - RubyCommand.Argument(name: "value", value: value), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "output_file_name", value: outputFileName)]) - _ = runner.executeCommand(command) -} - -/** - Sets a value for a key with cocoapods-keys - - - parameters: - - useBundleExec: Use bundle exec when there is a Gemfile presented - - key: The key to be saved with cocoapods-keys - - value: The value to be saved with cocoapods-keys - - project: The project name - - Adds a key to [cocoapods-keys](https://github.com/orta/cocoapods-keys) - */ -func setPodKey(useBundleExec: Bool = true, - key: String, - value: String, - project: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "set_pod_key", className: nil, args: [RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec), - RubyCommand.Argument(name: "key", value: key), - RubyCommand.Argument(name: "value", value: value), - RubyCommand.Argument(name: "project", value: project)]) - _ = runner.executeCommand(command) -} - -/** - Setup the keychain and match to work with CI - - - parameters: - - force: Force setup, even if not executed by CI - - provider: CI provider. If none is set, the provider is detected automatically - - - Creates a new temporary keychain for use with match| - - Switches match to `readonly` mode to not create new profiles/cert on CI| - - Sets up log and test result paths to be easily collectible| - >| - This action helps with CI integration. Add this to the top of your Fastfile if you use CI. - */ -func setupCi(force: Bool = false, - provider: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "setup_ci", className: nil, args: [RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "provider", value: provider)]) - _ = runner.executeCommand(command) -} - -/** - Setup the keychain and match to work with CircleCI - - - parameter force: Force setup, even if not executed by CircleCI - - - Creates a new temporary keychain for use with match| - - Switches match to `readonly` mode to not create new profiles/cert on CI| - - Sets up log and test result paths to be easily collectible| - >| - This action helps with CircleCI integration. Add this to the top of your Fastfile if you use CircleCI. - */ -func setupCircleCi(force: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "setup_circle_ci", className: nil, args: [RubyCommand.Argument(name: "force", value: force)]) - _ = runner.executeCommand(command) -} - -/** - Setup xcodebuild, gym and scan for easier Jenkins integration - - - parameters: - - force: Force setup, even if not executed by Jenkins - - unlockKeychain: Unlocks keychain - - addKeychainToSearchList: Add to keychain search list - - setDefaultKeychain: Set keychain as default - - keychainPath: Path to keychain - - keychainPassword: Keychain password - - setCodeSigningIdentity: Set code signing identity from CODE_SIGNING_IDENTITY environment - - codeSigningIdentity: Code signing identity - - outputDirectory: The directory in which the ipa file should be stored in - - derivedDataPath: The directory where built products and other derived data will go - - resultBundle: Produce the result bundle describing what occurred will be placed - - - Adds and unlocks keychains from Jenkins 'Keychains and Provisioning Profiles Plugin'| - - Sets unlocked keychain to be used by Match| - - Sets code signing identity from Jenkins 'Keychains and Provisioning Profiles Plugin'| - - Sets output directory to './output' (gym, scan and backup_xcarchive)| - - Sets derived data path to './derivedData' (xcodebuild, gym, scan and clear_derived_data, carthage)| - - Produce result bundle (gym and scan)| - >| - This action helps with Jenkins integration. Creates own derived data for each job. All build results like IPA files and archives will be stored in the `./output` directory. - The action also works with [Keychains and Provisioning Profiles Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Keychains+and+Provisioning+Profiles+Plugin), the selected keychain will be automatically unlocked and the selected code signing identity will be used. - [Match](https://docs.fastlane.tools/actions/match/) will be also set up to use the unlocked keychain and set in read-only mode, if its environment variables were not yet defined. - By default this action will only work when _fastlane_ is executed on a CI system. - */ -func setupJenkins(force: Bool = false, - unlockKeychain: Bool = true, - addKeychainToSearchList: Any = "replace", - setDefaultKeychain: Bool = true, - keychainPath: String? = nil, - keychainPassword: String, - setCodeSigningIdentity: Bool = true, - codeSigningIdentity: String? = nil, - outputDirectory: String = "./output", - derivedDataPath: String = "./derivedData", - resultBundle: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "setup_jenkins", className: nil, args: [RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "unlock_keychain", value: unlockKeychain), - RubyCommand.Argument(name: "add_keychain_to_search_list", value: addKeychainToSearchList), - RubyCommand.Argument(name: "set_default_keychain", value: setDefaultKeychain), - RubyCommand.Argument(name: "keychain_path", value: keychainPath), - RubyCommand.Argument(name: "keychain_password", value: keychainPassword), - RubyCommand.Argument(name: "set_code_signing_identity", value: setCodeSigningIdentity), - RubyCommand.Argument(name: "code_signing_identity", value: codeSigningIdentity), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath), - RubyCommand.Argument(name: "result_bundle", value: resultBundle)]) - _ = runner.executeCommand(command) -} - -/** - Setup the keychain and match to work with Travis CI - - - parameter force: Force setup, even if not executed by travis - - - Creates a new temporary keychain for use with match| - - Switches match to `readonly` mode to not create new profiles/cert on CI| - >| - This action helps with Travis integration. Add this to the top of your Fastfile if you use Travis. - */ -func setupTravis(force: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "setup_travis", className: nil, args: [RubyCommand.Argument(name: "force", value: force)]) - _ = runner.executeCommand(command) -} - -/** - Runs a shell command - - - parameters: - - command: Shell command to be executed - - log: Determines whether fastlane should print out the executed command itself and output of the executed command. If command line option --troubleshoot is used, then it overrides this option to true - - errorCallback: A callback invoked with the command output if there is a non-zero exit status - - - returns: Outputs the string and executes it. When running in tests, it returns the actual command instead of executing it - - Allows running an arbitrary shell command. - Be aware of a specific behavior of `sh` action with regard to the working directory. For details, refer to [Advanced](https://docs.fastlane.tools/advanced/#directory-behavior). - */ -@discardableResult func sh(command: String, - log: Bool = true, - errorCallback: ((String) -> Void)? = nil) -> String { - let command = RubyCommand(commandID: "", methodName: "sh", className: nil, args: [RubyCommand.Argument(name: "command", value: command), - RubyCommand.Argument(name: "log", value: log), - RubyCommand.Argument(name: "error_callback", value: errorCallback, type: .stringClosure)]) - return runner.executeCommand(command) -} - -/** - Alias for the `get_provisioning_profile` action - - - parameters: - - adhoc: Setting this flag will generate AdHoc profiles instead of App Store Profiles - - developerId: Setting this flag will generate Developer ID profiles instead of App Store Profiles - - development: Renew the development certificate instead of the production one - - skipInstall: By default, the certificate will be added to your local machine. Setting this flag will skip this action - - force: Renew provisioning profiles regardless of its state - to automatically add all devices for ad hoc profiles - - appIdentifier: The bundle identifier of your app - - username: Your Apple ID Username - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - provisioningName: The name of the profile that is used on the Apple Developer Portal - - ignoreProfilesWithDifferentName: Use in combination with :provisioning_name - when true only profiles matching this exact name will be downloaded - - outputPath: Directory in which the profile should be stored - - certId: The ID of the code signing certificate to use (e.g. 78ADL6LVAA) - - certOwnerName: The certificate name to use for new profiles, or to renew with. (e.g. "Felix Krause") - - filename: Filename to use for the generated provisioning profile (must include .mobileprovision) - - skipFetchProfiles: Skips the verification of existing profiles which is useful if you have thousands of profiles - - skipCertificateVerification: Skips the verification of the certificates for every existing profiles. This will make sure the provisioning profile can be used on the local machine - - platform: Set the provisioning profile's platform (i.e. ios, tvos) - - readonly: Only fetch existing profile, don't generate new ones - - templateName: The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. "Apple Pay Pass Suppression Development") - - failOnNameTaken: Should the command fail if it was about to create a duplicate of an existing provisioning profile. It can happen due to issues on Apple Developer Portal, when profile to be recreated was not properly deleted first - - - returns: The UUID of the profile sigh just fetched/generated - - **Note**: It is recommended to use [match](https://docs.fastlane.tools/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your provisioning profiles. Use _sigh_ directly only if you want full control over what's going on and know more about codesigning. - */ -func sigh(adhoc: Bool = false, - developerId: Bool = false, - development: Bool = false, - skipInstall: Bool = false, - force: Bool = false, - appIdentifier: String, - username: String, - teamId: String? = nil, - teamName: String? = nil, - provisioningName: String? = nil, - ignoreProfilesWithDifferentName: Bool = false, - outputPath: String = ".", - certId: String? = nil, - certOwnerName: String? = nil, - filename: String? = nil, - skipFetchProfiles: Bool = false, - skipCertificateVerification: Bool = false, - platform: Any = "ios", - readonly: Bool = false, - templateName: String? = nil, - failOnNameTaken: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "sigh", className: nil, args: [RubyCommand.Argument(name: "adhoc", value: adhoc), - RubyCommand.Argument(name: "developer_id", value: developerId), - RubyCommand.Argument(name: "development", value: development), - RubyCommand.Argument(name: "skip_install", value: skipInstall), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "provisioning_name", value: provisioningName), - RubyCommand.Argument(name: "ignore_profiles_with_different_name", value: ignoreProfilesWithDifferentName), - RubyCommand.Argument(name: "output_path", value: outputPath), - RubyCommand.Argument(name: "cert_id", value: certId), - RubyCommand.Argument(name: "cert_owner_name", value: certOwnerName), - RubyCommand.Argument(name: "filename", value: filename), - RubyCommand.Argument(name: "skip_fetch_profiles", value: skipFetchProfiles), - RubyCommand.Argument(name: "skip_certificate_verification", value: skipCertificateVerification), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "readonly", value: readonly), - RubyCommand.Argument(name: "template_name", value: templateName), - RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken)]) - _ = runner.executeCommand(command) -} - -/** - Skip the creation of the fastlane/README.md file when running fastlane - - Tell _fastlane_ to not automatically create a `fastlane/README.md` when running _fastlane_. You can always trigger the creation of this file manually by running `fastlane docs`. - */ -func skipDocs() { - let command = RubyCommand(commandID: "", methodName: "skip_docs", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Send a success/error message to your [Slack](https://slack.com) group - - - parameters: - - message: The message that should be displayed on Slack. This supports the standard Slack markup language - - pretext: This is optional text that appears above the message attachment block. This supports the standard Slack markup language - - channel: #channel or @username - - useWebhookConfiguredUsernameAndIcon: Use webhook's default username and icon settings? (true/false) - - slackUrl: Create an Incoming WebHook for your Slack group - - username: Overrides the webhook's username property if use_webhook_configured_username_and_icon is false - - iconUrl: Overrides the webhook's image property if use_webhook_configured_username_and_icon is false - - payload: Add additional information to this post. payload must be a hash containing any key with any value - - defaultPayloads: Remove some of the default payloads. More information about the available payloads on GitHub - - attachmentProperties: Merge additional properties in the slack attachment, see https://api.slack.com/docs/attachments - - success: Was this build successful? (true/false) - - failOnError: Should an error sending the slack notification cause a failure? (true/false) - - linkNames: Find and link channel names and usernames (true/false) - - Create an Incoming WebHook and export this as `SLACK_URL`. Can send a message to **#channel** (by default), a direct message to **@username** or a message to a private group **group** with success (green) or failure (red) status. - */ -func slack(message: String? = nil, - pretext: String? = nil, - channel: String? = nil, - useWebhookConfiguredUsernameAndIcon: Bool = false, - slackUrl: String, - username: String = "fastlane", - iconUrl: String = "https://fastlane.tools/assets/img/fastlane_icon.png", - payload: [String: Any] = [:], - defaultPayloads: [String]? = nil, - attachmentProperties: [String: Any] = [:], - success: Bool = true, - failOnError: Bool = true, - linkNames: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "slack", className: nil, args: [RubyCommand.Argument(name: "message", value: message), - RubyCommand.Argument(name: "pretext", value: pretext), - RubyCommand.Argument(name: "channel", value: channel), - RubyCommand.Argument(name: "use_webhook_configured_username_and_icon", value: useWebhookConfiguredUsernameAndIcon), - RubyCommand.Argument(name: "slack_url", value: slackUrl), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "icon_url", value: iconUrl), - RubyCommand.Argument(name: "payload", value: payload), - RubyCommand.Argument(name: "default_payloads", value: defaultPayloads), - RubyCommand.Argument(name: "attachment_properties", value: attachmentProperties), - RubyCommand.Argument(name: "success", value: success), - RubyCommand.Argument(name: "fail_on_error", value: failOnError), - RubyCommand.Argument(name: "link_names", value: linkNames)]) - _ = runner.executeCommand(command) -} - -/** - Show a train of the fastlane progress - - - returns: A string that is being sent to slack - */ -func slackTrain() { - let command = RubyCommand(commandID: "", methodName: "slack_train", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - - */ -func slackTrainCrash() { - let command = RubyCommand(commandID: "", methodName: "slack_train_crash", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Show a train of the fastlane progress - - - parameters: - - distance: How many rails do we need? - - train: Train emoji - - rail: Character or emoji for the rail - - reverseDirection: Pass true if you want the train to go from left to right - */ -func slackTrainStart(distance: Int = 5, - train: String = "🚝", - rail: String = "=", - reverseDirection: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "slack_train_start", className: nil, args: [RubyCommand.Argument(name: "distance", value: distance), - RubyCommand.Argument(name: "train", value: train), - RubyCommand.Argument(name: "rail", value: rail), - RubyCommand.Argument(name: "reverse_direction", value: reverseDirection)]) - _ = runner.executeCommand(command) -} - -/** - Use slather to generate a code coverage report - - - parameters: - - buildDirectory: The location of the build output - - proj: The project file that slather looks at - - workspace: The workspace that slather looks at - - scheme: Scheme to use when calling slather - - configuration: Configuration to use when calling slather (since slather-2.4.1) - - inputFormat: The input format that slather should look for - - buildkite: Tell slather that it is running on Buildkite - - teamcity: Tell slather that it is running on TeamCity - - jenkins: Tell slather that it is running on Jenkins - - travis: Tell slather that it is running on TravisCI - - travisPro: Tell slather that it is running on TravisCI Pro - - circleci: Tell slather that it is running on CircleCI - - coveralls: Tell slather that it should post data to Coveralls - - simpleOutput: Tell slather that it should output results to the terminal - - gutterJson: Tell slather that it should output results as Gutter JSON format - - coberturaXml: Tell slather that it should output results as Cobertura XML format - - sonarqubeXml: Tell slather that it should output results as SonarQube Generic XML format - - llvmCov: Tell slather that it should output results as llvm-cov show format - - json: Tell slather that it should output results as static JSON report - - html: Tell slather that it should output results as static HTML pages - - show: Tell slather that it should open static html pages automatically - - sourceDirectory: Tell slather the location of your source files - - outputDirectory: Tell slather the location of for your output files - - ignore: Tell slather to ignore files matching a path or any path from an array of paths - - verbose: Tell slather to enable verbose mode - - useBundleExec: Use bundle exec to execute slather. Make sure it is in the Gemfile - - binaryBasename: Basename of the binary file, this should match the name of your bundle excluding its extension (i.e. YourApp [for YourApp.app bundle]) - - binaryFile: Binary file name to be used for code coverage - - arch: Specify which architecture the binary file is in. Needed for universal binaries - - sourceFiles: A Dir.glob compatible pattern used to limit the lookup to specific source files. Ignored in gcov mode - - decimals: The amount of decimals to use for % coverage reporting - - Slather works with multiple code coverage formats, including Xcode 7 code coverage. - Slather is available at [https://github.com/SlatherOrg/slather](https://github.com/SlatherOrg/slather). - */ -func slather(buildDirectory: String? = nil, - proj: String? = nil, - workspace: String? = nil, - scheme: String? = nil, - configuration: String? = nil, - inputFormat: String? = nil, - buildkite: Bool? = nil, - teamcity: Bool? = nil, - jenkins: Bool? = nil, - travis: Bool? = nil, - travisPro: Bool? = nil, - circleci: Bool? = nil, - coveralls: Bool? = nil, - simpleOutput: Bool? = nil, - gutterJson: Bool? = nil, - coberturaXml: Bool? = nil, - sonarqubeXml: Bool? = nil, - llvmCov: Any? = nil, - json: Bool? = nil, - html: Bool? = nil, - show: Bool = false, - sourceDirectory: String? = nil, - outputDirectory: String? = nil, - ignore: [String]? = nil, - verbose: Bool? = nil, - useBundleExec: Bool = false, - binaryBasename: Bool = false, - binaryFile: [String]? = nil, - arch: String? = nil, - sourceFiles: Bool = false, - decimals: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "slather", className: nil, args: [RubyCommand.Argument(name: "build_directory", value: buildDirectory), - RubyCommand.Argument(name: "proj", value: proj), - RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "input_format", value: inputFormat), - RubyCommand.Argument(name: "buildkite", value: buildkite), - RubyCommand.Argument(name: "teamcity", value: teamcity), - RubyCommand.Argument(name: "jenkins", value: jenkins), - RubyCommand.Argument(name: "travis", value: travis), - RubyCommand.Argument(name: "travis_pro", value: travisPro), - RubyCommand.Argument(name: "circleci", value: circleci), - RubyCommand.Argument(name: "coveralls", value: coveralls), - RubyCommand.Argument(name: "simple_output", value: simpleOutput), - RubyCommand.Argument(name: "gutter_json", value: gutterJson), - RubyCommand.Argument(name: "cobertura_xml", value: coberturaXml), - RubyCommand.Argument(name: "sonarqube_xml", value: sonarqubeXml), - RubyCommand.Argument(name: "llvm_cov", value: llvmCov), - RubyCommand.Argument(name: "json", value: json), - RubyCommand.Argument(name: "html", value: html), - RubyCommand.Argument(name: "show", value: show), - RubyCommand.Argument(name: "source_directory", value: sourceDirectory), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "ignore", value: ignore), - RubyCommand.Argument(name: "verbose", value: verbose), - RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec), - RubyCommand.Argument(name: "binary_basename", value: binaryBasename), - RubyCommand.Argument(name: "binary_file", value: binaryFile), - RubyCommand.Argument(name: "arch", value: arch), - RubyCommand.Argument(name: "source_files", value: sourceFiles), - RubyCommand.Argument(name: "decimals", value: decimals)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `capture_ios_screenshots` action - - - parameters: - - workspace: Path the workspace file - - project: Path the project file - - xcargs: Pass additional arguments to xcodebuild for the test phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - - xcconfig: Use an extra XCCONFIG file to build your app - - devices: A list of devices you want to take the screenshots from - - languages: A list of languages which should be used - - launchArguments: A list of launch arguments which should be used - - outputDirectory: The directory where to store the screenshots - - outputSimulatorLogs: If the logs generated by the app (e.g. using NSLog, perror, etc.) in the Simulator should be written to the output_directory - - iosVersion: By default, the latest version should be used automatically. If you want to change it, do it here - - skipOpenSummary: Don't open the HTML summary after running _snapshot_ - - skipHelperVersionCheck: Do not check for most recent SnapshotHelper code - - clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot - - reinstallApp: Enabling this option will automatically uninstall the application before running it - - eraseSimulator: Enabling this option will automatically erase the simulator before running the application - - overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception - - localizeSimulator: Enabling this option will configure the Simulator's system language - - darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark) - - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app) - - addPhotos: A list of photos that should be added to the simulator before running the application - - addVideos: A list of videos that should be added to the simulator before running the application - - htmlTemplate: A path to screenshots.html template - - buildlogPath: The directory where to store the build log - - clean: Should the project be cleaned before building it? - - testWithoutBuilding: Test without building, requires a derived data path - - configuration: The configuration to use when building the app. Defaults to 'Release' - - xcprettyArgs: Additional xcpretty arguments - - sdk: The SDK that should be used for building the application - - scheme: The scheme you want to use, this must be the scheme for the UI Tests - - numberOfRetries: The number of times a test can fail before snapshot should stop retrying - - stopAfterFirstError: Should snapshot stop immediately after the tests completely failed on one device? - - derivedDataPath: The directory where build products and other derived data will go - - resultBundle: Should an Xcode result bundle be generated in the output directory - - testTargetName: The name of the target you want to test (if you desire to override the Target Application from Xcode) - - namespaceLogFiles: Separate the log files per device and per language - - concurrentSimulators: Take snapshots on multiple simulators concurrently. Note: This option is only applicable when running against Xcode 9 - - disableSlideToType: Disable the simulator from showing the 'Slide to type' prompt - - clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies - - testplan: The testplan associated with the scheme that should be used for testing - - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run - - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip - - disableXcpretty: Disable xcpretty formatting of build - */ -func snapshot(workspace: Any? = snapshotfile.workspace, - project: Any? = snapshotfile.project, - xcargs: Any? = snapshotfile.xcargs, - xcconfig: Any? = snapshotfile.xcconfig, - devices: [String]? = snapshotfile.devices, - languages: [String] = snapshotfile.languages, - launchArguments: [String] = snapshotfile.launchArguments, - outputDirectory: Any = snapshotfile.outputDirectory, - outputSimulatorLogs: Bool = snapshotfile.outputSimulatorLogs, - iosVersion: Any? = snapshotfile.iosVersion, - skipOpenSummary: Bool = snapshotfile.skipOpenSummary, - skipHelperVersionCheck: Bool = snapshotfile.skipHelperVersionCheck, - clearPreviousScreenshots: Bool = snapshotfile.clearPreviousScreenshots, - reinstallApp: Bool = snapshotfile.reinstallApp, - eraseSimulator: Bool = snapshotfile.eraseSimulator, - overrideStatusBar: Bool = snapshotfile.overrideStatusBar, - localizeSimulator: Bool = snapshotfile.localizeSimulator, - darkMode: Bool? = snapshotfile.darkMode, - appIdentifier: Any? = snapshotfile.appIdentifier, - addPhotos: [String]? = snapshotfile.addPhotos, - addVideos: [String]? = snapshotfile.addVideos, - htmlTemplate: Any? = snapshotfile.htmlTemplate, - buildlogPath: Any = snapshotfile.buildlogPath, - clean: Bool = snapshotfile.clean, - testWithoutBuilding: Bool? = snapshotfile.testWithoutBuilding, - configuration: Any? = snapshotfile.configuration, - xcprettyArgs: Any? = snapshotfile.xcprettyArgs, - sdk: Any? = snapshotfile.sdk, - scheme: Any? = snapshotfile.scheme, - numberOfRetries: Int = snapshotfile.numberOfRetries, - stopAfterFirstError: Bool = snapshotfile.stopAfterFirstError, - derivedDataPath: Any? = snapshotfile.derivedDataPath, - resultBundle: Bool = snapshotfile.resultBundle, - testTargetName: Any? = snapshotfile.testTargetName, - namespaceLogFiles: Any? = snapshotfile.namespaceLogFiles, - concurrentSimulators: Bool = snapshotfile.concurrentSimulators, - disableSlideToType: Bool = snapshotfile.disableSlideToType, - clonedSourcePackagesPath: Any? = snapshotfile.clonedSourcePackagesPath, - testplan: Any? = snapshotfile.testplan, - onlyTesting: Any? = snapshotfile.onlyTesting, - skipTesting: Any? = snapshotfile.skipTesting, - disableXcpretty: Bool? = snapshotfile.disableXcpretty) { - let command = RubyCommand(commandID: "", methodName: "snapshot", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "project", value: project), - RubyCommand.Argument(name: "xcargs", value: xcargs), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "devices", value: devices), - RubyCommand.Argument(name: "languages", value: languages), - RubyCommand.Argument(name: "launch_arguments", value: launchArguments), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "output_simulator_logs", value: outputSimulatorLogs), - RubyCommand.Argument(name: "ios_version", value: iosVersion), - RubyCommand.Argument(name: "skip_open_summary", value: skipOpenSummary), - RubyCommand.Argument(name: "skip_helper_version_check", value: skipHelperVersionCheck), - RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots), - RubyCommand.Argument(name: "reinstall_app", value: reinstallApp), - RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator), - RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar), - RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator), - RubyCommand.Argument(name: "dark_mode", value: darkMode), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "add_photos", value: addPhotos), - RubyCommand.Argument(name: "add_videos", value: addVideos), - RubyCommand.Argument(name: "html_template", value: htmlTemplate), - RubyCommand.Argument(name: "buildlog_path", value: buildlogPath), - RubyCommand.Argument(name: "clean", value: clean), - RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs), - RubyCommand.Argument(name: "sdk", value: sdk), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries), - RubyCommand.Argument(name: "stop_after_first_error", value: stopAfterFirstError), - RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath), - RubyCommand.Argument(name: "result_bundle", value: resultBundle), - RubyCommand.Argument(name: "test_target_name", value: testTargetName), - RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles), - RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators), - RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType), - RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath), - RubyCommand.Argument(name: "testplan", value: testplan), - RubyCommand.Argument(name: "only_testing", value: onlyTesting), - RubyCommand.Argument(name: "skip_testing", value: skipTesting), - RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty)]) - _ = runner.executeCommand(command) -} - -/** - Invokes sonar-scanner to programmatically run SonarQube analysis - - - parameters: - - projectConfigurationPath: The path to your sonar project configuration file; defaults to `sonar-project.properties` - - projectKey: The key sonar uses to identify the project, e.g. `name.gretzki.awesomeApp`. Must either be specified here or inside the sonar project configuration file - - projectName: The name of the project that gets displayed on the sonar report page. Must either be specified here or inside the sonar project configuration file - - projectVersion: The project's version that gets displayed on the sonar report page. Must either be specified here or inside the sonar project configuration file - - sourcesPath: Comma-separated paths to directories containing source files. Must either be specified here or inside the sonar project configuration file - - projectLanguage: Language key, e.g. objc - - sourceEncoding: Used encoding of source files, e.g., UTF-8 - - sonarRunnerArgs: Pass additional arguments to sonar-scanner. Be sure to provide the arguments with a leading `-D` e.g. FL_SONAR_RUNNER_ARGS="-Dsonar.verbose=true" - - sonarLogin: Pass the Sonar Login token (e.g: xxxxxxprivate_token_XXXXbXX7e) - - sonarUrl: Pass the url of the Sonar server - - sonarOrganization: Key of the organization on SonarCloud - - branchName: Pass the branch name which is getting scanned - - pullRequestBranch: The name of the branch that contains the changes to be merged - - pullRequestBase: The long-lived branch into which the PR will be merged - - pullRequestKey: Unique identifier of your PR. Must correspond to the key of the PR in GitHub or TFS - - - returns: The exit code of the sonar-scanner binary - - See [http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner](http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner) for details. - It can process unit test results if formatted as junit report as shown in [xctest](https://docs.fastlane.tools/actions/xctest/) action. It can also integrate coverage reports in Cobertura format, which can be transformed into by the [slather](https://docs.fastlane.tools/actions/slather/) action. - */ -func sonar(projectConfigurationPath: String? = nil, - projectKey: String? = nil, - projectName: String? = nil, - projectVersion: String? = nil, - sourcesPath: String? = nil, - projectLanguage: String? = nil, - sourceEncoding: String? = nil, - sonarRunnerArgs: String? = nil, - sonarLogin: String? = nil, - sonarUrl: String? = nil, - sonarOrganization: String? = nil, - branchName: String? = nil, - pullRequestBranch: String? = nil, - pullRequestBase: String? = nil, - pullRequestKey: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "sonar", className: nil, args: [RubyCommand.Argument(name: "project_configuration_path", value: projectConfigurationPath), - RubyCommand.Argument(name: "project_key", value: projectKey), - RubyCommand.Argument(name: "project_name", value: projectName), - RubyCommand.Argument(name: "project_version", value: projectVersion), - RubyCommand.Argument(name: "sources_path", value: sourcesPath), - RubyCommand.Argument(name: "project_language", value: projectLanguage), - RubyCommand.Argument(name: "source_encoding", value: sourceEncoding), - RubyCommand.Argument(name: "sonar_runner_args", value: sonarRunnerArgs), - RubyCommand.Argument(name: "sonar_login", value: sonarLogin), - RubyCommand.Argument(name: "sonar_url", value: sonarUrl), - RubyCommand.Argument(name: "sonar_organization", value: sonarOrganization), - RubyCommand.Argument(name: "branch_name", value: branchName), - RubyCommand.Argument(name: "pull_request_branch", value: pullRequestBranch), - RubyCommand.Argument(name: "pull_request_base", value: pullRequestBase), - RubyCommand.Argument(name: "pull_request_key", value: pullRequestKey)]) - _ = runner.executeCommand(command) -} - -/** - Find, print, and copy Spaceship logs - - - parameters: - - latest: Finds only the latest Spaceshop log file if set to true, otherwise returns all - - printContents: Prints the contents of the found Spaceship log file(s) - - printPaths: Prints the paths of the found Spaceship log file(s) - - copyToPath: Copies the found Spaceship log file(s) to a directory - - copyToClipboard: Copies the contents of the found Spaceship log file(s) to the clipboard - - - returns: The array of Spaceship logs - */ -func spaceshipLogs(latest: Bool = true, - printContents: Bool = false, - printPaths: Bool = false, - copyToPath: String? = nil, - copyToClipboard: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "spaceship_logs", className: nil, args: [RubyCommand.Argument(name: "latest", value: latest), - RubyCommand.Argument(name: "print_contents", value: printContents), - RubyCommand.Argument(name: "print_paths", value: printPaths), - RubyCommand.Argument(name: "copy_to_path", value: copyToPath), - RubyCommand.Argument(name: "copy_to_clipboard", value: copyToClipboard)]) - _ = runner.executeCommand(command) -} - -/** - Upload dSYM file to [Splunk MINT](https://mint.splunk.com/) - - - parameters: - - dsym: dSYM.zip file to upload to Splunk MINT - - apiKey: Splunk MINT App API key e.g. f57a57ca - - apiToken: Splunk MINT API token e.g. e05ba40754c4869fb7e0b61 - - verbose: Make detailed output - - uploadProgress: Show upload progress - - proxyUsername: Proxy username - - proxyPassword: Proxy password - - proxyAddress: Proxy address - - proxyPort: Proxy port - */ -func splunkmint(dsym: String? = nil, - apiKey: String, - apiToken: String, - verbose: Bool = false, - uploadProgress: Bool = false, - proxyUsername: String? = nil, - proxyPassword: String? = nil, - proxyAddress: String? = nil, - proxyPort: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "splunkmint", className: nil, args: [RubyCommand.Argument(name: "dsym", value: dsym), - RubyCommand.Argument(name: "api_key", value: apiKey), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "verbose", value: verbose), - RubyCommand.Argument(name: "upload_progress", value: uploadProgress), - RubyCommand.Argument(name: "proxy_username", value: proxyUsername), - RubyCommand.Argument(name: "proxy_password", value: proxyPassword), - RubyCommand.Argument(name: "proxy_address", value: proxyAddress), - RubyCommand.Argument(name: "proxy_port", value: proxyPort)]) - _ = runner.executeCommand(command) -} - -/** - Runs Swift Package Manager on your project - - - parameters: - - command: The swift command (one of: build, test, clean, reset, update, resolve, generate-xcodeproj, init) - - buildPath: Specify build/cache directory [default: ./.build] - - packagePath: Change working directory before any other operation - - xcconfig: Use xcconfig file to override swift package generate-xcodeproj defaults - - configuration: Build with configuration (debug|release) [default: debug] - - disableSandbox: Disable using the sandbox when executing subprocesses - - xcprettyOutput: Specifies the output type for xcpretty. eg. 'test', or 'simple' - - xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf'), requires xcpretty_output to be specified also - - verbose: Increase verbosity of informational output - */ -func spm(command: String = "build", - buildPath: String? = nil, - packagePath: String? = nil, - xcconfig: String? = nil, - configuration: String? = nil, - disableSandbox: Bool = false, - xcprettyOutput: String? = nil, - xcprettyArgs: String? = nil, - verbose: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "spm", className: nil, args: [RubyCommand.Argument(name: "command", value: command), - RubyCommand.Argument(name: "build_path", value: buildPath), - RubyCommand.Argument(name: "package_path", value: packagePath), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "disable_sandbox", value: disableSandbox), - RubyCommand.Argument(name: "xcpretty_output", value: xcprettyOutput), - RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs), - RubyCommand.Argument(name: "verbose", value: verbose)]) - _ = runner.executeCommand(command) -} - -/** - Allows remote command execution using ssh - - - parameters: - - username: Username - - password: Password - - host: Hostname - - port: Port - - commands: Commands - - log: Log commands and output - - Lets you execute remote commands via ssh using username/password or ssh-agent. If one of the commands in command-array returns non 0, it fails. - */ -func ssh(username: String, - password: String? = nil, - host: String, - port: String = "22", - commands: [String]? = nil, - log: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "ssh", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "password", value: password), - RubyCommand.Argument(name: "host", value: host), - RubyCommand.Argument(name: "port", value: port), - RubyCommand.Argument(name: "commands", value: commands), - RubyCommand.Argument(name: "log", value: log)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `upload_to_play_store` action - - - parameters: - - packageName: The package name of the application to use - - versionName: Version name (used when uploading new apks/aabs) - defaults to 'versionName' in build.gradle or AndroidManifest.xml - - versionCode: Version code (used when updating rollout or promoting specific versions) - - releaseStatus: Release status (used when uploading new apks/aabs) - valid values are completed, draft, halted, inProgress - - track: The track of the application to use. The default available tracks are: production, beta, alpha, internal - - rollout: The percentage of the user fraction when uploading to the rollout track - - metadataPath: Path to the directory containing the metadata files - - key: **DEPRECATED!** Use `--json_key` instead - The p12 File used to authenticate with Google - - issuer: **DEPRECATED!** Use `--json_key` instead - The issuer of the p12 file (email address of the service account) - - jsonKey: The path to a file containing service account JSON, used to authenticate with Google - - jsonKeyData: The raw service account JSON data used to authenticate with Google - - apk: Path to the APK file to upload - - apkPaths: An array of paths to APK files to upload - - aab: Path to the AAB file to upload - - aabPaths: An array of paths to AAB files to upload - - skipUploadApk: Whether to skip uploading APK - - skipUploadAab: Whether to skip uploading AAB - - skipUploadMetadata: Whether to skip uploading metadata, changelogs not included - - skipUploadChangelogs: Whether to skip uploading changelogs - - skipUploadImages: Whether to skip uploading images, screenshots not included - - skipUploadScreenshots: Whether to skip uploading SCREENSHOTS - - trackPromoteTo: The track to promote to. The default available tracks are: production, beta, alpha, internal - - validateOnly: Only validate changes with Google Play rather than actually publish - - mapping: Path to the mapping file to upload - - mappingPaths: An array of paths to mapping files to upload - - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/ - - checkSupersededTracks: **DEPRECATED!** Google Play does this automatically now - Check the other tracks for superseded versions and disable them - - timeout: Timeout for read, open, and send (in seconds) - - deactivateOnPromote: **DEPRECATED!** Google Play does this automatically now - When promoting to a new track, deactivate the binary in the origin track - - versionCodesToRetain: An array of version codes to retain when publishing a new APK - - inAppUpdatePriority: In-app update priority for all the newly added apks in the release. Can take values between [0,5] - - obbMainReferencesVersion: References version of 'main' expansion file - - obbMainFileSize: Size of 'main' expansion file in bytes - - obbPatchReferencesVersion: References version of 'patch' expansion file - - obbPatchFileSize: Size of 'patch' expansion file in bytes - - More information: https://docs.fastlane.tools/actions/supply/ - */ -func supply(packageName: String, - versionName: String? = nil, - versionCode: Int? = nil, - releaseStatus: String = "completed", - track: String = "production", - rollout: String? = nil, - metadataPath: String? = nil, - key: String? = nil, - issuer: String? = nil, - jsonKey: String? = nil, - jsonKeyData: String? = nil, - apk: String? = nil, - apkPaths: [String]? = nil, - aab: String? = nil, - aabPaths: [String]? = nil, - skipUploadApk: Bool = false, - skipUploadAab: Bool = false, - skipUploadMetadata: Bool = false, - skipUploadChangelogs: Bool = false, - skipUploadImages: Bool = false, - skipUploadScreenshots: Bool = false, - trackPromoteTo: String? = nil, - validateOnly: Bool = false, - mapping: String? = nil, - mappingPaths: [String]? = nil, - rootUrl: String? = nil, - checkSupersededTracks: Bool = false, - timeout: Int = 300, - deactivateOnPromote: Bool = true, - versionCodesToRetain: [String]? = nil, - inAppUpdatePriority: Int? = nil, - obbMainReferencesVersion: String? = nil, - obbMainFileSize: String? = nil, - obbPatchReferencesVersion: String? = nil, - obbPatchFileSize: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "supply", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName), - RubyCommand.Argument(name: "version_name", value: versionName), - RubyCommand.Argument(name: "version_code", value: versionCode), - RubyCommand.Argument(name: "release_status", value: releaseStatus), - RubyCommand.Argument(name: "track", value: track), - RubyCommand.Argument(name: "rollout", value: rollout), - RubyCommand.Argument(name: "metadata_path", value: metadataPath), - RubyCommand.Argument(name: "key", value: key), - RubyCommand.Argument(name: "issuer", value: issuer), - RubyCommand.Argument(name: "json_key", value: jsonKey), - RubyCommand.Argument(name: "json_key_data", value: jsonKeyData), - RubyCommand.Argument(name: "apk", value: apk), - RubyCommand.Argument(name: "apk_paths", value: apkPaths), - RubyCommand.Argument(name: "aab", value: aab), - RubyCommand.Argument(name: "aab_paths", value: aabPaths), - RubyCommand.Argument(name: "skip_upload_apk", value: skipUploadApk), - RubyCommand.Argument(name: "skip_upload_aab", value: skipUploadAab), - RubyCommand.Argument(name: "skip_upload_metadata", value: skipUploadMetadata), - RubyCommand.Argument(name: "skip_upload_changelogs", value: skipUploadChangelogs), - RubyCommand.Argument(name: "skip_upload_images", value: skipUploadImages), - RubyCommand.Argument(name: "skip_upload_screenshots", value: skipUploadScreenshots), - RubyCommand.Argument(name: "track_promote_to", value: trackPromoteTo), - RubyCommand.Argument(name: "validate_only", value: validateOnly), - RubyCommand.Argument(name: "mapping", value: mapping), - RubyCommand.Argument(name: "mapping_paths", value: mappingPaths), - RubyCommand.Argument(name: "root_url", value: rootUrl), - RubyCommand.Argument(name: "check_superseded_tracks", value: checkSupersededTracks), - RubyCommand.Argument(name: "timeout", value: timeout), - RubyCommand.Argument(name: "deactivate_on_promote", value: deactivateOnPromote), - RubyCommand.Argument(name: "version_codes_to_retain", value: versionCodesToRetain), - RubyCommand.Argument(name: "in_app_update_priority", value: inAppUpdatePriority), - RubyCommand.Argument(name: "obb_main_references_version", value: obbMainReferencesVersion), - RubyCommand.Argument(name: "obb_main_file_size", value: obbMainFileSize), - RubyCommand.Argument(name: "obb_patch_references_version", value: obbPatchReferencesVersion), - RubyCommand.Argument(name: "obb_patch_file_size", value: obbPatchFileSize)]) - _ = runner.executeCommand(command) -} - -/** - Run swift code validation using SwiftLint - - - parameters: - - mode: SwiftLint mode: :lint, :autocorrect or :analyze - - path: Specify path to lint - - outputFile: Path to output SwiftLint result - - configFile: Custom configuration file of SwiftLint - - strict: Fail on warnings? (true/false) - - files: List of files to process - - ignoreExitStatus: Ignore the exit status of the SwiftLint command, so that serious violations don't fail the build (true/false) - - raiseIfSwiftlintError: Raises an error if swiftlint fails, so you can fail CI/CD jobs if necessary (true/false) - - reporter: Choose output reporter. Available: xcode, json, csv, checkstyle, junit, html, emoji, sonarqube, markdown, github-actions-logging - - quiet: Don't print status logs like 'Linting ' & 'Done linting' - - executable: Path to the `swiftlint` executable on your machine - - format: Format code when mode is :autocorrect - - noCache: Ignore the cache when mode is :autocorrect or :lint - - compilerLogPath: Compiler log path when mode is :analyze - */ -func swiftlint(mode: Any = "lint", - path: String? = nil, - outputFile: String? = nil, - configFile: String? = nil, - strict: Bool = false, - files: Any? = nil, - ignoreExitStatus: Bool = false, - raiseIfSwiftlintError: Bool = false, - reporter: String? = nil, - quiet: Bool = false, - executable: String? = nil, - format: Bool = false, - noCache: Bool = false, - compilerLogPath: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "swiftlint", className: nil, args: [RubyCommand.Argument(name: "mode", value: mode), - RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "output_file", value: outputFile), - RubyCommand.Argument(name: "config_file", value: configFile), - RubyCommand.Argument(name: "strict", value: strict), - RubyCommand.Argument(name: "files", value: files), - RubyCommand.Argument(name: "ignore_exit_status", value: ignoreExitStatus), - RubyCommand.Argument(name: "raise_if_swiftlint_error", value: raiseIfSwiftlintError), - RubyCommand.Argument(name: "reporter", value: reporter), - RubyCommand.Argument(name: "quiet", value: quiet), - RubyCommand.Argument(name: "executable", value: executable), - RubyCommand.Argument(name: "format", value: format), - RubyCommand.Argument(name: "no_cache", value: noCache), - RubyCommand.Argument(name: "compiler_log_path", value: compilerLogPath)]) - _ = runner.executeCommand(command) -} - -/** - Easily sync your certificates and profiles across your team (via _match_) - - - parameters: - - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id - - additionalCertTypes: Create additional cert types needed for macOS installers (valid values: mac_installer_distribution, developer_id_installer) - - readonly: Only fetch existing certificates and profiles, don't generate new ones - - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution) - - skipProvisioningProfiles: Skip syncing provisioning profiles - - appIdentifier: The bundle identifier(s) of your app (comma-separated) - - username: Your Apple ID Username - - teamId: The ID of your Developer Portal team if you're in multiple teams - - teamName: The name of your Developer Portal team if you're in multiple teams - - storageMode: Define where you want to store your certificates - - gitUrl: URL to the git repo containing all the certificates - - gitBranch: Specific git branch to use - - gitFullName: git user full name to commit - - gitUserEmail: git user email to commit - - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision) - - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail - - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64 - - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64 - - googleCloudBucketName: Name of the Google Cloud Storage bucket to use - - googleCloudKeysFile: Path to the gc_keys.json file - - googleCloudProjectId: ID of the Google Cloud project to use for authentication - - s3Region: Name of the S3 region - - s3AccessKey: S3 access key - - s3SecretAccessKey: S3 secret access key - - s3Bucket: Name of the S3 bucket - - s3ObjectPrefix: Prefix to be used on all objects uploaded to S3 - - keychainName: Keychain the items should be imported to - - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password - - force: Renew the provisioning profiles every time you run match - - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile type 'appstore' - - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes - - skipDocs: Skip generation of a README.md for the created git repository - - platform: Set the provisioning profile's platform to work with (i.e. ios, tvos, macos) - - templateName: The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. "Apple Pay Pass Suppression Development") - - profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified - - failOnNameTaken: Should the command fail if it was about to create a duplicate of an existing provisioning profile. It can happen due to issues on Apple Developer Portal, when profile to be recreated was not properly deleted first - - outputPath: Path in which to export certificates, key and profile - - verbose: Print out extra information and all commands - - More information: https://docs.fastlane.tools/actions/match/ - */ -func syncCodeSigning(type: String = "development", - additionalCertTypes: [String]? = nil, - readonly: Bool = false, - generateAppleCerts: Bool = true, - skipProvisioningProfiles: Bool = false, - appIdentifier: [String], - username: String, - teamId: String? = nil, - teamName: String? = nil, - storageMode: String = "git", - gitUrl: String, - gitBranch: String = "master", - gitFullName: String? = nil, - gitUserEmail: String? = nil, - shallowClone: Bool = false, - cloneBranchDirectly: Bool = false, - gitBasicAuthorization: String? = nil, - gitBearerAuthorization: String? = nil, - googleCloudBucketName: String? = nil, - googleCloudKeysFile: String? = nil, - googleCloudProjectId: String? = nil, - s3Region: String? = nil, - s3AccessKey: String? = nil, - s3SecretAccessKey: String? = nil, - s3Bucket: String? = nil, - s3ObjectPrefix: String? = nil, - keychainName: String = "login.keychain", - keychainPassword: String? = nil, - force: Bool = false, - forceForNewDevices: Bool = false, - skipConfirmation: Bool = false, - skipDocs: Bool = false, - platform: String = "ios", - templateName: String? = nil, - profileName: String? = nil, - failOnNameTaken: Bool = false, - outputPath: String? = nil, - verbose: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "sync_code_signing", className: nil, args: [RubyCommand.Argument(name: "type", value: type), - RubyCommand.Argument(name: "additional_cert_types", value: additionalCertTypes), - RubyCommand.Argument(name: "readonly", value: readonly), - RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts), - RubyCommand.Argument(name: "skip_provisioning_profiles", value: skipProvisioningProfiles), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "storage_mode", value: storageMode), - RubyCommand.Argument(name: "git_url", value: gitUrl), - RubyCommand.Argument(name: "git_branch", value: gitBranch), - RubyCommand.Argument(name: "git_full_name", value: gitFullName), - RubyCommand.Argument(name: "git_user_email", value: gitUserEmail), - RubyCommand.Argument(name: "shallow_clone", value: shallowClone), - RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly), - RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization), - RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization), - RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName), - RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile), - RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId), - RubyCommand.Argument(name: "s3_region", value: s3Region), - RubyCommand.Argument(name: "s3_access_key", value: s3AccessKey), - RubyCommand.Argument(name: "s3_secret_access_key", value: s3SecretAccessKey), - RubyCommand.Argument(name: "s3_bucket", value: s3Bucket), - RubyCommand.Argument(name: "s3_object_prefix", value: s3ObjectPrefix), - RubyCommand.Argument(name: "keychain_name", value: keychainName), - RubyCommand.Argument(name: "keychain_password", value: keychainPassword), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "force_for_new_devices", value: forceForNewDevices), - RubyCommand.Argument(name: "skip_confirmation", value: skipConfirmation), - RubyCommand.Argument(name: "skip_docs", value: skipDocs), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "template_name", value: templateName), - RubyCommand.Argument(name: "profile_name", value: profileName), - RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken), - RubyCommand.Argument(name: "output_path", value: outputPath), - RubyCommand.Argument(name: "verbose", value: verbose)]) - _ = runner.executeCommand(command) -} - -/** - Specify the Team ID you want to use for the Apple Developer Portal - */ -func teamId() { - let command = RubyCommand(commandID: "", methodName: "team_id", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Set a team to use by its name - */ -func teamName() { - let command = RubyCommand(commandID: "", methodName: "team_name", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Upload a new build to [TestFairy](https://www.testfairy.com/) - - - parameters: - - apiKey: API Key for TestFairy - - ipa: Path to your IPA file for iOS - - apk: Path to your APK file for Android - - symbolsFile: Symbols mapping file - - uploadUrl: API URL for TestFairy - - testersGroups: Array of tester groups to be notified - - metrics: Array of metrics to record (cpu,memory,network,phone_signal,gps,battery,mic,wifi) - - comment: Additional release notes for this upload. This text will be added to email notifications - - autoUpdate: Allows an easy upgrade of all users to the current version. To enable set to 'on' - - notify: Send email to testers - - options: Array of options (shake,video_only_wifi,anonymous) - - custom: Array of custom options. Contact support@testfairy.com for more information - - timeout: Request timeout in seconds - - You can retrieve your API key on [your settings page](https://free.testfairy.com/settings/) - */ -func testfairy(apiKey: String, - ipa: String? = nil, - apk: String? = nil, - symbolsFile: String? = nil, - uploadUrl: String = "https://upload.testfairy.com", - testersGroups: [String] = [], - metrics: [String] = [], - comment: String = "No comment provided", - autoUpdate: String = "off", - notify: String = "off", - options: [String] = [], - custom: String = "", - timeout: Int? = nil) { - let command = RubyCommand(commandID: "", methodName: "testfairy", className: nil, args: [RubyCommand.Argument(name: "api_key", value: apiKey), - RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "apk", value: apk), - RubyCommand.Argument(name: "symbols_file", value: symbolsFile), - RubyCommand.Argument(name: "upload_url", value: uploadUrl), - RubyCommand.Argument(name: "testers_groups", value: testersGroups), - RubyCommand.Argument(name: "metrics", value: metrics), - RubyCommand.Argument(name: "comment", value: comment), - RubyCommand.Argument(name: "auto_update", value: autoUpdate), - RubyCommand.Argument(name: "notify", value: notify), - RubyCommand.Argument(name: "options", value: options), - RubyCommand.Argument(name: "custom", value: custom), - RubyCommand.Argument(name: "timeout", value: timeout)]) - _ = runner.executeCommand(command) -} - -/** - Alias for the `upload_to_testflight` action - - - parameters: - - username: Your Apple ID Username - - appIdentifier: The bundle identifier of the app to upload or manage testers (optional) - - appPlatform: The platform to use (optional) - - appleId: Apple ID property in the App Information section in App Store Connect - - ipa: Path to the ipa file to upload - - demoAccountRequired: Do you need a demo account when Apple does review? - - betaAppReviewInfo: Beta app review information for contact info and demo account - - localizedAppInfo: Localized beta app test info for description, feedback email, marketing url, and privacy policy - - betaAppDescription: Provide the 'Beta App Description' when uploading a new build - - betaAppFeedbackEmail: Provide the beta app email when uploading a new build - - localizedBuildInfo: Localized beta app test info for what's new - - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog - - skipSubmission: Skip the distributing action of pilot and only upload the ipa file - - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps - - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default - - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command) - - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist - - distributeExternal: Should the build be distributed to external testers? - - notifyExternalTesters: Should notify external testers? - - appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed - - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed - - expirePreviousBuilds: Should expire previous builds? - - firstName: The tester's first name - - lastName: The tester's last name - - email: The tester's email - - testersFilePath: Path to a CSV file of testers - - groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","Team 2"` - - teamId: The ID of your App Store Connect team if you're in multiple teams - - teamName: The name of your App Store Connect team if you're in multiple teams - - devPortalTeamId: The short ID of your team in the developer portal, if you're in multiple teams. Different from your iTC team ID! - - itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column - - waitProcessingInterval: Interval in seconds to wait for App Store Connect processing - - waitForUploadedBuild: **DEPRECATED!** No longer needed with the transition over to the App Store Connect API - Use version info from uploaded ipa file to determine what build to use for distribution. If set to false, latest processing or any latest build will be used - - rejectBuildWaitingForReview: Expire previous if it's 'waiting for review' - - More details can be found on https://docs.fastlane.tools/actions/pilot/. - This integration will only do the TestFlight upload. - */ -func testflight(username: String, - appIdentifier: String? = nil, - appPlatform: String = "ios", - appleId: String? = nil, - ipa: String? = nil, - demoAccountRequired: Bool = false, - betaAppReviewInfo: [String: Any]? = nil, - localizedAppInfo: [String: Any]? = nil, - betaAppDescription: String? = nil, - betaAppFeedbackEmail: String? = nil, - localizedBuildInfo: [String: Any]? = nil, - changelog: String? = nil, - skipSubmission: Bool = false, - skipWaitingForBuildProcessing: Bool = false, - updateBuildInfoOnUpload: Bool = false, - distributeOnly: Bool = false, - usesNonExemptEncryption: Bool = false, - distributeExternal: Bool = false, - notifyExternalTesters: Bool = true, - appVersion: String? = nil, - buildNumber: String? = nil, - expirePreviousBuilds: Bool = false, - firstName: String? = nil, - lastName: String? = nil, - email: String? = nil, - testersFilePath: String = "./testers.csv", - groups: [String]? = nil, - teamId: Any? = nil, - teamName: String? = nil, - devPortalTeamId: String? = nil, - itcProvider: String? = nil, - waitProcessingInterval: Int = 30, - waitForUploadedBuild: Bool = false, - rejectBuildWaitingForReview: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "testflight", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "app_platform", value: appPlatform), - RubyCommand.Argument(name: "apple_id", value: appleId), - RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "demo_account_required", value: demoAccountRequired), - RubyCommand.Argument(name: "beta_app_review_info", value: betaAppReviewInfo), - RubyCommand.Argument(name: "localized_app_info", value: localizedAppInfo), - RubyCommand.Argument(name: "beta_app_description", value: betaAppDescription), - RubyCommand.Argument(name: "beta_app_feedback_email", value: betaAppFeedbackEmail), - RubyCommand.Argument(name: "localized_build_info", value: localizedBuildInfo), - RubyCommand.Argument(name: "changelog", value: changelog), - RubyCommand.Argument(name: "skip_submission", value: skipSubmission), - RubyCommand.Argument(name: "skip_waiting_for_build_processing", value: skipWaitingForBuildProcessing), - RubyCommand.Argument(name: "update_build_info_on_upload", value: updateBuildInfoOnUpload), - RubyCommand.Argument(name: "distribute_only", value: distributeOnly), - RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption), - RubyCommand.Argument(name: "distribute_external", value: distributeExternal), - RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters), - RubyCommand.Argument(name: "app_version", value: appVersion), - RubyCommand.Argument(name: "build_number", value: buildNumber), - RubyCommand.Argument(name: "expire_previous_builds", value: expirePreviousBuilds), - RubyCommand.Argument(name: "first_name", value: firstName), - RubyCommand.Argument(name: "last_name", value: lastName), - RubyCommand.Argument(name: "email", value: email), - RubyCommand.Argument(name: "testers_file_path", value: testersFilePath), - RubyCommand.Argument(name: "groups", value: groups), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId), - RubyCommand.Argument(name: "itc_provider", value: itcProvider), - RubyCommand.Argument(name: "wait_processing_interval", value: waitProcessingInterval), - RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild), - RubyCommand.Argument(name: "reject_build_waiting_for_review", value: rejectBuildWaitingForReview)]) - _ = runner.executeCommand(command) -} - -/** - Upload a new build to [Tryouts](https://tryouts.io/) - - - parameters: - - appId: Tryouts application hash - - apiToken: API Token (api_key:api_secret) for Tryouts Access - - buildFile: Path to your IPA or APK file. Optional if you use the _gym_ or _xcodebuild_ action - - notes: Release notes - - notesPath: Release notes text file path. Overrides the :notes parameter - - notify: Notify testers? 0 for no - - status: 2 to make your release public. Release will be distributed to available testers. 1 to make your release private. Release won't be distributed to testers. This also prevents release from showing up for SDK update - - More information: [http://tryouts.readthedocs.org/en/latest/releases.html#create-release](http://tryouts.readthedocs.org/en/latest/releases.html#create-release) - */ -func tryouts(appId: String, - apiToken: String, - buildFile: String, - notes: String? = nil, - notesPath: String? = nil, - notify: Int = 1, - status: Int = 2) { - let command = RubyCommand(commandID: "", methodName: "tryouts", className: nil, args: [RubyCommand.Argument(name: "app_id", value: appId), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "build_file", value: buildFile), - RubyCommand.Argument(name: "notes", value: notes), - RubyCommand.Argument(name: "notes_path", value: notesPath), - RubyCommand.Argument(name: "notify", value: notify), - RubyCommand.Argument(name: "status", value: status)]) - _ = runner.executeCommand(command) -} - -/** - Post a tweet on [Twitter.com](https://twitter.com) - - - parameters: - - consumerKey: Consumer Key - - consumerSecret: Consumer Secret - - accessToken: Access Token - - accessTokenSecret: Access Token Secret - - message: The tweet - - Post a tweet on Twitter. Requires you to setup an app on [twitter.com](https://twitter.com) and obtain `consumer` and `access_token`. - */ -func twitter(consumerKey: String, - consumerSecret: String, - accessToken: String, - accessTokenSecret: String, - message: String) { - let command = RubyCommand(commandID: "", methodName: "twitter", className: nil, args: [RubyCommand.Argument(name: "consumer_key", value: consumerKey), - RubyCommand.Argument(name: "consumer_secret", value: consumerSecret), - RubyCommand.Argument(name: "access_token", value: accessToken), - RubyCommand.Argument(name: "access_token_secret", value: accessTokenSecret), - RubyCommand.Argument(name: "message", value: message)]) - _ = runner.executeCommand(command) -} - -/** - Post a message to [Typetalk](https://www.typetalk.com/) - */ -func typetalk() { - let command = RubyCommand(commandID: "", methodName: "typetalk", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Unlock a keychain - - - parameters: - - path: Path to the keychain file - - password: Keychain password - - addToSearchList: Add to keychain search list - - setDefault: Set as default keychain - - Unlocks the given keychain file and adds it to the keychain search list. - Keychains can be replaced with `add_to_search_list: :replace`. - */ -func unlockKeychain(path: String = "login", - password: String, - addToSearchList: Bool = true, - setDefault: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "unlock_keychain", className: nil, args: [RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "password", value: password), - RubyCommand.Argument(name: "add_to_search_list", value: addToSearchList), - RubyCommand.Argument(name: "set_default", value: setDefault)]) - _ = runner.executeCommand(command) -} - -/** - This action changes the app group identifiers in the entitlements file - - - parameters: - - entitlementsFile: The path to the entitlement file which contains the app group identifiers - - appGroupIdentifiers: An Array of unique identifiers for the app groups. Eg. ['group.com.test.testapp'] - - Updates the App Group Identifiers in the given Entitlements file, so you can have app groups for the app store build and app groups for an enterprise build. - */ -func updateAppGroupIdentifiers(entitlementsFile: String, - appGroupIdentifiers: Any) { - let command = RubyCommand(commandID: "", methodName: "update_app_group_identifiers", className: nil, args: [RubyCommand.Argument(name: "entitlements_file", value: entitlementsFile), - RubyCommand.Argument(name: "app_group_identifiers", value: appGroupIdentifiers)]) - _ = runner.executeCommand(command) -} - -/** - Update the project's bundle identifier - - - parameters: - - xcodeproj: Path to your Xcode project - - plistPath: Path to info plist, relative to your Xcode project - - appIdentifier: The app Identifier you want to set - - Update an app identifier by either setting `CFBundleIdentifier` or `PRODUCT_BUNDLE_IDENTIFIER`, depending on which is already in use. - */ -func updateAppIdentifier(xcodeproj: String, - plistPath: String, - appIdentifier: String) { - let command = RubyCommand(commandID: "", methodName: "update_app_identifier", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj), - RubyCommand.Argument(name: "plist_path", value: plistPath), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier)]) - _ = runner.executeCommand(command) -} - -/** - Configures Xcode's Codesigning options - - - parameters: - - path: Path to your Xcode project - - useAutomaticSigning: Defines if project should use automatic signing - - teamId: Team ID, is used when upgrading project - - targets: Specify targets you want to toggle the signing mech. (default to all targets) - - buildConfigurations: Specify build_configurations you want to toggle the signing mech. (default to all targets) - - codeSignIdentity: Code signing identity type (iPhone Developer, iPhone Distribution) - - profileName: Provisioning profile name to use for code signing - - profileUuid: Provisioning profile UUID to use for code signing - - bundleIdentifier: Application Product Bundle Identifier - - - returns: The current status (boolean) of codesigning after modification - - Configures Xcode's Codesigning options of all targets in the project - */ -func updateCodeSigningSettings(path: String, - useAutomaticSigning: Bool = false, - teamId: String? = nil, - targets: [String]? = nil, - buildConfigurations: [String]? = nil, - codeSignIdentity: String? = nil, - profileName: String? = nil, - profileUuid: String? = nil, - bundleIdentifier: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "update_code_signing_settings", className: nil, args: [RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "use_automatic_signing", value: useAutomaticSigning), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "targets", value: targets), - RubyCommand.Argument(name: "build_configurations", value: buildConfigurations), - RubyCommand.Argument(name: "code_sign_identity", value: codeSignIdentity), - RubyCommand.Argument(name: "profile_name", value: profileName), - RubyCommand.Argument(name: "profile_uuid", value: profileUuid), - RubyCommand.Argument(name: "bundle_identifier", value: bundleIdentifier)]) - _ = runner.executeCommand(command) -} - -/** - Makes sure fastlane-tools are up-to-date when running fastlane - - - parameters: - - noUpdate: Don't update during this run. This is used internally - - nightly: **DEPRECATED!** Nightly builds are no longer being made available - Opt-in to install and use nightly fastlane builds - - This action will update fastlane to the most recent version - major version updates will not be performed automatically, as they might include breaking changes. If an update was performed, fastlane will be restarted before the run continues. - - If you are using rbenv or rvm, everything should be good to go. However, if you are using the system's default ruby, some additional setup is needed for this action to work correctly. In short, fastlane needs to be able to access your gem library without running in `sudo` mode. - - The simplest possible fix for this is putting the following lines into your `~/.bashrc` or `~/.zshrc` file:| - | - ```bash| - export GEM_HOME=~/.gems| - export PATH=$PATH:~/.gems/bin| - ```| - >| - After the above changes, restart your terminal, then run `mkdir $GEM_HOME` to create the new gem directory. After this, you're good to go! - - Recommended usage of the `update_fastlane` action is at the top inside of the `before_all` block, before running any other action. - */ -func updateFastlane(noUpdate: Bool = false, - nightly: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "update_fastlane", className: nil, args: [RubyCommand.Argument(name: "no_update", value: noUpdate), - RubyCommand.Argument(name: "nightly", value: nightly)]) - _ = runner.executeCommand(command) -} - -/** - This action changes the iCloud container identifiers in the entitlements file - - - parameters: - - entitlementsFile: The path to the entitlement file which contains the iCloud container identifiers - - icloudContainerIdentifiers: An Array of unique identifiers for the iCloud containers. Eg. ['iCloud.com.test.testapp'] - - Updates the iCloud Container Identifiers in the given Entitlements file, so you can use different iCloud containers for different builds like Adhoc, App Store, etc. - */ -func updateIcloudContainerIdentifiers(entitlementsFile: String, - icloudContainerIdentifiers: Any) { - let command = RubyCommand(commandID: "", methodName: "update_icloud_container_identifiers", className: nil, args: [RubyCommand.Argument(name: "entitlements_file", value: entitlementsFile), - RubyCommand.Argument(name: "icloud_container_identifiers", value: icloudContainerIdentifiers)]) - _ = runner.executeCommand(command) -} - -/** - Update a Info.plist file with bundle identifier and display name - - - parameters: - - xcodeproj: Path to your Xcode project - - plistPath: Path to info plist - - scheme: Scheme of info plist - - appIdentifier: The App Identifier of your app - - displayName: The Display Name of your app - - block: A block to process plist with custom logic - - This action allows you to modify your `Info.plist` file before building. This may be useful if you want a separate build for alpha, beta or nightly builds, but don't want a separate target. - */ -func updateInfoPlist(xcodeproj: String? = nil, - plistPath: String? = nil, - scheme: String? = nil, - appIdentifier: String? = nil, - displayName: String? = nil, - block: Any? = nil) { - let command = RubyCommand(commandID: "", methodName: "update_info_plist", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj), - RubyCommand.Argument(name: "plist_path", value: plistPath), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "display_name", value: displayName), - RubyCommand.Argument(name: "block", value: block)]) - _ = runner.executeCommand(command) -} - -/** - This action changes the keychain access groups in the entitlements file - - - parameters: - - entitlementsFile: The path to the entitlement file which contains the keychain access groups - - identifiers: An Array of unique identifiers for the keychain access groups. Eg. ['your.keychain.access.groups.identifiers'] - - Updates the Keychain Group Access Groups in the given Entitlements file, so you can have keychain access groups for the app store build and keychain access groups for an enterprise build. - */ -func updateKeychainAccessGroups(entitlementsFile: String, - identifiers: Any) { - let command = RubyCommand(commandID: "", methodName: "update_keychain_access_groups", className: nil, args: [RubyCommand.Argument(name: "entitlements_file", value: entitlementsFile), - RubyCommand.Argument(name: "identifiers", value: identifiers)]) - _ = runner.executeCommand(command) -} - -/** - Update a plist file - - - parameters: - - plistPath: Path to plist file - - block: A block to process plist with custom logic - - This action allows you to modify any value inside any `plist` file. - */ -func updatePlist(plistPath: String? = nil, - block: Any) { - let command = RubyCommand(commandID: "", methodName: "update_plist", className: nil, args: [RubyCommand.Argument(name: "plist_path", value: plistPath), - RubyCommand.Argument(name: "block", value: block)]) - _ = runner.executeCommand(command) -} - -/** - Updated code signing settings from 'Automatic' to a specific profile - - - parameters: - - path: Path to your Xcode project - - udid: **DEPRECATED!** Use `:uuid` instead - - uuid: The UUID of the provisioning profile you want to use - */ -func updateProjectCodeSigning(path: String, - udid: String? = nil, - uuid: String) { - let command = RubyCommand(commandID: "", methodName: "update_project_code_signing", className: nil, args: [RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "udid", value: udid), - RubyCommand.Argument(name: "uuid", value: uuid)]) - _ = runner.executeCommand(command) -} - -/** - Update projects code signing settings from your provisioning profile - - - parameters: - - xcodeproj: Path to your Xcode project - - profile: Path to provisioning profile (.mobileprovision) - - targetFilter: A filter for the target name. Use a standard regex - - buildConfigurationFilter: Legacy option, use 'target_filter' instead - - buildConfiguration: A filter for the build configuration name. Use a standard regex. Applied to all configurations if not specified - - certificate: Path to apple root certificate - - codeSigningIdentity: Code sign identity for build configuration - - You should check out the [code signing guide](https://docs.fastlane.tools/codesigning/getting-started/) before using this action. - This action retrieves a provisioning profile UUID from a provisioning profile (`.mobileprovision`) to set up the Xcode projects' code signing settings in `*.xcodeproj/project.pbxproj`. - The `:target_filter` value can be used to only update code signing for the specified targets. - The `:build_configuration` value can be used to only update code signing for the specified build configurations of the targets passing through the `:target_filter`. - Example usage is the WatchKit Extension or WatchKit App, where you need separate provisioning profiles. - Example: `update_project_provisioning(xcodeproj: "..", target_filter: ".*WatchKit App.*")`. - */ -func updateProjectProvisioning(xcodeproj: String? = nil, - profile: String, - targetFilter: Any? = nil, - buildConfigurationFilter: String? = nil, - buildConfiguration: Any? = nil, - certificate: String = "/tmp/AppleIncRootCertificate.cer", - codeSigningIdentity: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "update_project_provisioning", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj), - RubyCommand.Argument(name: "profile", value: profile), - RubyCommand.Argument(name: "target_filter", value: targetFilter), - RubyCommand.Argument(name: "build_configuration_filter", value: buildConfigurationFilter), - RubyCommand.Argument(name: "build_configuration", value: buildConfiguration), - RubyCommand.Argument(name: "certificate", value: certificate), - RubyCommand.Argument(name: "code_signing_identity", value: codeSigningIdentity)]) - _ = runner.executeCommand(command) -} - -/** - Update Xcode Development Team ID - - - parameters: - - path: Path to your Xcode project - - targets: Name of the targets you want to update - - teamid: The Team ID you want to use - - This action updates the Developer Team ID of your Xcode project. - */ -func updateProjectTeam(path: String, - targets: [String]? = nil, - teamid: String) { - let command = RubyCommand(commandID: "", methodName: "update_project_team", className: nil, args: [RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "targets", value: targets), - RubyCommand.Argument(name: "teamid", value: teamid)]) - _ = runner.executeCommand(command) -} - -/** - Set [Urban Airship](https://www.urbanairship.com/) plist configuration values - - - parameters: - - plistPath: Path to Urban Airship configuration Plist - - developmentAppKey: The development app key - - developmentAppSecret: The development app secret - - productionAppKey: The production app key - - productionAppSecret: The production app secret - - detectProvisioningMode: Automatically detect provisioning mode - - This action updates the `AirshipConfig.plist` needed to configure the Urban Airship SDK at runtime, allowing keys and secrets to easily be set for the Enterprise and Production versions of the application. - */ -func updateUrbanAirshipConfiguration(plistPath: String, - developmentAppKey: String? = nil, - developmentAppSecret: String? = nil, - productionAppKey: String? = nil, - productionAppSecret: String? = nil, - detectProvisioningMode: Bool? = nil) { - let command = RubyCommand(commandID: "", methodName: "update_urban_airship_configuration", className: nil, args: [RubyCommand.Argument(name: "plist_path", value: plistPath), - RubyCommand.Argument(name: "development_app_key", value: developmentAppKey), - RubyCommand.Argument(name: "development_app_secret", value: developmentAppSecret), - RubyCommand.Argument(name: "production_app_key", value: productionAppKey), - RubyCommand.Argument(name: "production_app_secret", value: productionAppSecret), - RubyCommand.Argument(name: "detect_provisioning_mode", value: detectProvisioningMode)]) - _ = runner.executeCommand(command) -} - -/** - Updates the URL schemes in the given Info.plist - - - parameters: - - path: The Plist file's path - - urlSchemes: The new URL schemes - - updateUrlSchemes: Block that is called to update schemes with current schemes passed in as parameter - - This action allows you to update the URL schemes of the app before building it. - For example, you can use this to set a different URL scheme for the alpha or beta version of the app. - */ -func updateUrlSchemes(path: String, - urlSchemes: Any? = nil, - updateUrlSchemes: Any? = nil) { - let command = RubyCommand(commandID: "", methodName: "update_url_schemes", className: nil, args: [RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "url_schemes", value: urlSchemes), - RubyCommand.Argument(name: "update_url_schemes", value: updateUrlSchemes)]) - _ = runner.executeCommand(command) -} - -/** - Upload dSYM symbolication files to Crashlytics - - - parameters: - - dsymPath: Path to the DSYM file or zip to upload - - dsymPaths: Paths to the DSYM files or zips to upload - - apiToken: Crashlytics API Key - - gspPath: Path to GoogleService-Info.plist - - appId: Firebase Crashlytics APP ID - - binaryPath: The path to the upload-symbols file of the Fabric app - - platform: The platform of the app (ios, appletvos, mac) - - dsymWorkerThreads: The number of threads to use for simultaneous dSYM upload - - debug: Enable debug mode for upload-symbols - - This action allows you to upload symbolication files to Crashlytics. It's extra useful if you use it to download the latest dSYM files from Apple when you use Bitcode. This action will not fail the build if one of the uploads failed. The reason for that is that sometimes some of dSYM files are invalid, and we don't want them to fail the complete build. - */ -func uploadSymbolsToCrashlytics(dsymPath: String = "./spec/fixtures/dSYM/Themoji2.dSYM", - dsymPaths: [String]? = nil, - apiToken: String? = nil, - gspPath: String? = nil, - appId: String? = nil, - binaryPath: String? = nil, - platform: String = "ios", - dsymWorkerThreads: Int = 1, - debug: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "upload_symbols_to_crashlytics", className: nil, args: [RubyCommand.Argument(name: "dsym_path", value: dsymPath), - RubyCommand.Argument(name: "dsym_paths", value: dsymPaths), - RubyCommand.Argument(name: "api_token", value: apiToken), - RubyCommand.Argument(name: "gsp_path", value: gspPath), - RubyCommand.Argument(name: "app_id", value: appId), - RubyCommand.Argument(name: "binary_path", value: binaryPath), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "dsym_worker_threads", value: dsymWorkerThreads), - RubyCommand.Argument(name: "debug", value: debug)]) - _ = runner.executeCommand(command) -} - -/** - Upload dSYM symbolication files to Sentry - - - parameters: - - apiHost: API host url for Sentry - - apiKey: API key for Sentry - - authToken: Authentication token for Sentry - - orgSlug: Organization slug for Sentry project - - projectSlug: Project slug for Sentry - - dsymPath: Path to your symbols file. For iOS and Mac provide path to app.dSYM.zip - - dsymPaths: Path to an array of your symbols file. For iOS and Mac provide path to app.dSYM.zip - - - returns: The uploaded dSYM path(s) - - This action allows you to upload symbolication files to Sentry. It's extra useful if you use it to download the latest dSYM files from Apple when you use Bitcode. - */ -func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/api/0", - apiKey: String? = nil, - authToken: String? = nil, - orgSlug: String, - projectSlug: String, - dsymPath: String? = nil, - dsymPaths: Any? = nil) { - let command = RubyCommand(commandID: "", methodName: "upload_symbols_to_sentry", className: nil, args: [RubyCommand.Argument(name: "api_host", value: apiHost), - RubyCommand.Argument(name: "api_key", value: apiKey), - RubyCommand.Argument(name: "auth_token", value: authToken), - RubyCommand.Argument(name: "org_slug", value: orgSlug), - RubyCommand.Argument(name: "project_slug", value: projectSlug), - RubyCommand.Argument(name: "dsym_path", value: dsymPath), - RubyCommand.Argument(name: "dsym_paths", value: dsymPaths)]) - _ = runner.executeCommand(command) -} - -/** - Upload metadata and binary to App Store Connect (via _deliver_) - - - parameters: - - username: Your Apple ID Username - - appIdentifier: The bundle identifier of your app - - appVersion: The version that should be edited or created - - ipa: Path to your ipa file - - pkg: Path to your pkg file - - buildNumber: If set the given build number (already uploaded to iTC) will be used instead of the current built one - - platform: The platform to use (optional) - - editLive: Modify live metadata, this option disables ipa upload and screenshot upload - - useLiveVersion: Force usage of live version rather than edit version - - metadataPath: Path to the folder containing the metadata files - - screenshotsPath: Path to the folder containing the screenshots - - skipBinaryUpload: Skip uploading an ipa or pkg to App Store Connect - - skipScreenshots: Don't upload the screenshots - - skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots - - skipAppVersionUpdate: Don't update app version for submission - - force: Skip the HTML report file verification - - overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones - - submitForReview: Submit the new version for Review after uploading everything - - rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible - - automaticRelease: Should the app be automatically released once it's approved? (Can not be used together with `auto_release_date`) - - autoReleaseDate: Date in milliseconds for automatically releasing on pending approval (Can not be used together with `automatic_release`) - - phasedRelease: Enable the phased release feature of iTC - - resetRatings: Reset the summary rating when you release a new version of the application - - priceTier: The price tier of this application - - appRatingConfigPath: Path to the app rating's config - - submissionInformation: Extra information for the submission (e.g. compliance specifications, IDFA settings) - - teamId: The ID of your App Store Connect team if you're in multiple teams - - teamName: The name of your App Store Connect team if you're in multiple teams - - devPortalTeamId: The short ID of your Developer Portal team, if you're in multiple teams. Different from your iTC team ID! - - devPortalTeamName: The name of your Developer Portal team if you're in multiple teams - - itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column - - runPrecheckBeforeSubmit: Run precheck before submitting to app review - - precheckDefaultRuleLevel: The default precheck rule level unless otherwise configured - - individualMetadataItems: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - An array of localized metadata items to upload individually by language so that errors can be identified. E.g. ['name', 'keywords', 'description']. Note: slow - - appIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the app icon - - appleWatchAppIcon: **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the Apple Watch app icon - - copyright: Metadata: The copyright notice - - primaryCategory: Metadata: The english name of the primary category (e.g. `Business`, `Books`) - - secondaryCategory: Metadata: The english name of the secondary category (e.g. `Business`, `Books`) - - primaryFirstSubCategory: Metadata: The english name of the primary first sub category (e.g. `Educational`, `Puzzle`) - - primarySecondSubCategory: Metadata: The english name of the primary second sub category (e.g. `Educational`, `Puzzle`) - - secondaryFirstSubCategory: Metadata: The english name of the secondary first sub category (e.g. `Educational`, `Puzzle`) - - secondarySecondSubCategory: Metadata: The english name of the secondary second sub category (e.g. `Educational`, `Puzzle`) - - tradeRepresentativeContactInformation: Metadata: A hash containing the trade representative contact information - - appReviewInformation: Metadata: A hash containing the review information - - appReviewAttachmentFile: Metadata: Path to the app review attachment file - - description: Metadata: The localised app description - - name: Metadata: The localised app name - - subtitle: Metadata: The localised app subtitle - - keywords: Metadata: An array of localised keywords - - promotionalText: Metadata: An array of localised promotional texts - - releaseNotes: Metadata: Localised release notes for this version - - privacyUrl: Metadata: Localised privacy url - - appleTvPrivacyPolicy: Metadata: Localised Apple TV privacy policy text - - supportUrl: Metadata: Localised support url - - marketingUrl: Metadata: Localised marketing url - - languages: Metadata: List of languages to activate - - ignoreLanguageDirectoryValidation: Ignore errors when invalid languages are found in metadata and screenshot directories - - precheckIncludeInAppPurchases: Should precheck check in-app purchases? - - app: The (spaceship) app ID of the app you want to use/modify - - Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration. - - If you don't want a PDF report for App Store builds, use the `:force` option. - This is useful when running _fastlane_ on your Continuous Integration server: - `_upload_to_app_store_(force: true)` - If your account is on multiple teams and you need to tell the `iTMSTransporter` which 'provider' to use, you can set the `:itc_provider` option to pass this info. - */ -func uploadToAppStore(username: String, - appIdentifier: String? = nil, - appVersion: String? = nil, - ipa: String? = nil, - pkg: String? = nil, - buildNumber: String? = nil, - platform: String = "ios", - editLive: Bool = false, - useLiveVersion: Bool = false, - metadataPath: String? = nil, - screenshotsPath: String? = nil, - skipBinaryUpload: Bool = false, - skipScreenshots: Bool = false, - skipMetadata: Bool = false, - skipAppVersionUpdate: Bool = false, - force: Bool = false, - overwriteScreenshots: Bool = false, - submitForReview: Bool = false, - rejectIfPossible: Bool = false, - automaticRelease: Bool = false, - autoReleaseDate: Int? = nil, - phasedRelease: Bool = false, - resetRatings: Bool = false, - priceTier: Any? = nil, - appRatingConfigPath: String? = nil, - submissionInformation: [String: Any]? = nil, - teamId: Any? = nil, - teamName: String? = nil, - devPortalTeamId: String? = nil, - devPortalTeamName: String? = nil, - itcProvider: String? = nil, - runPrecheckBeforeSubmit: Bool = true, - precheckDefaultRuleLevel: Any = "warn", - individualMetadataItems: [String]? = nil, - appIcon: String? = nil, - appleWatchAppIcon: String? = nil, - copyright: String? = nil, - primaryCategory: String? = nil, - secondaryCategory: String? = nil, - primaryFirstSubCategory: String? = nil, - primarySecondSubCategory: String? = nil, - secondaryFirstSubCategory: String? = nil, - secondarySecondSubCategory: String? = nil, - tradeRepresentativeContactInformation: [String: Any]? = nil, - appReviewInformation: [String: Any]? = nil, - appReviewAttachmentFile: String? = nil, - description: Any? = nil, - name: Any? = nil, - subtitle: [String: Any]? = nil, - keywords: [String: Any]? = nil, - promotionalText: [String: Any]? = nil, - releaseNotes: Any? = nil, - privacyUrl: Any? = nil, - appleTvPrivacyPolicy: Any? = nil, - supportUrl: Any? = nil, - marketingUrl: Any? = nil, - languages: [String]? = nil, - ignoreLanguageDirectoryValidation: Bool = false, - precheckIncludeInAppPurchases: Bool = true, - app: Any) { - let command = RubyCommand(commandID: "", methodName: "upload_to_app_store", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "app_version", value: appVersion), - RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "pkg", value: pkg), - RubyCommand.Argument(name: "build_number", value: buildNumber), - RubyCommand.Argument(name: "platform", value: platform), - RubyCommand.Argument(name: "edit_live", value: editLive), - RubyCommand.Argument(name: "use_live_version", value: useLiveVersion), - RubyCommand.Argument(name: "metadata_path", value: metadataPath), - RubyCommand.Argument(name: "screenshots_path", value: screenshotsPath), - RubyCommand.Argument(name: "skip_binary_upload", value: skipBinaryUpload), - RubyCommand.Argument(name: "skip_screenshots", value: skipScreenshots), - RubyCommand.Argument(name: "skip_metadata", value: skipMetadata), - RubyCommand.Argument(name: "skip_app_version_update", value: skipAppVersionUpdate), - RubyCommand.Argument(name: "force", value: force), - RubyCommand.Argument(name: "overwrite_screenshots", value: overwriteScreenshots), - RubyCommand.Argument(name: "submit_for_review", value: submitForReview), - RubyCommand.Argument(name: "reject_if_possible", value: rejectIfPossible), - RubyCommand.Argument(name: "automatic_release", value: automaticRelease), - RubyCommand.Argument(name: "auto_release_date", value: autoReleaseDate), - RubyCommand.Argument(name: "phased_release", value: phasedRelease), - RubyCommand.Argument(name: "reset_ratings", value: resetRatings), - RubyCommand.Argument(name: "price_tier", value: priceTier), - RubyCommand.Argument(name: "app_rating_config_path", value: appRatingConfigPath), - RubyCommand.Argument(name: "submission_information", value: submissionInformation), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId), - RubyCommand.Argument(name: "dev_portal_team_name", value: devPortalTeamName), - RubyCommand.Argument(name: "itc_provider", value: itcProvider), - RubyCommand.Argument(name: "run_precheck_before_submit", value: runPrecheckBeforeSubmit), - RubyCommand.Argument(name: "precheck_default_rule_level", value: precheckDefaultRuleLevel), - RubyCommand.Argument(name: "individual_metadata_items", value: individualMetadataItems), - RubyCommand.Argument(name: "app_icon", value: appIcon), - RubyCommand.Argument(name: "apple_watch_app_icon", value: appleWatchAppIcon), - RubyCommand.Argument(name: "copyright", value: copyright), - RubyCommand.Argument(name: "primary_category", value: primaryCategory), - RubyCommand.Argument(name: "secondary_category", value: secondaryCategory), - RubyCommand.Argument(name: "primary_first_sub_category", value: primaryFirstSubCategory), - RubyCommand.Argument(name: "primary_second_sub_category", value: primarySecondSubCategory), - RubyCommand.Argument(name: "secondary_first_sub_category", value: secondaryFirstSubCategory), - RubyCommand.Argument(name: "secondary_second_sub_category", value: secondarySecondSubCategory), - RubyCommand.Argument(name: "trade_representative_contact_information", value: tradeRepresentativeContactInformation), - RubyCommand.Argument(name: "app_review_information", value: appReviewInformation), - RubyCommand.Argument(name: "app_review_attachment_file", value: appReviewAttachmentFile), - RubyCommand.Argument(name: "description", value: description), - RubyCommand.Argument(name: "name", value: name), - RubyCommand.Argument(name: "subtitle", value: subtitle), - RubyCommand.Argument(name: "keywords", value: keywords), - RubyCommand.Argument(name: "promotional_text", value: promotionalText), - RubyCommand.Argument(name: "release_notes", value: releaseNotes), - RubyCommand.Argument(name: "privacy_url", value: privacyUrl), - RubyCommand.Argument(name: "apple_tv_privacy_policy", value: appleTvPrivacyPolicy), - RubyCommand.Argument(name: "support_url", value: supportUrl), - RubyCommand.Argument(name: "marketing_url", value: marketingUrl), - RubyCommand.Argument(name: "languages", value: languages), - RubyCommand.Argument(name: "ignore_language_directory_validation", value: ignoreLanguageDirectoryValidation), - RubyCommand.Argument(name: "precheck_include_in_app_purchases", value: precheckIncludeInAppPurchases), - RubyCommand.Argument(name: "app", value: app)]) - _ = runner.executeCommand(command) -} - -/** - Upload metadata, screenshots and binaries to Google Play (via _supply_) - - - parameters: - - packageName: The package name of the application to use - - versionName: Version name (used when uploading new apks/aabs) - defaults to 'versionName' in build.gradle or AndroidManifest.xml - - versionCode: Version code (used when updating rollout or promoting specific versions) - - releaseStatus: Release status (used when uploading new apks/aabs) - valid values are completed, draft, halted, inProgress - - track: The track of the application to use. The default available tracks are: production, beta, alpha, internal - - rollout: The percentage of the user fraction when uploading to the rollout track - - metadataPath: Path to the directory containing the metadata files - - key: **DEPRECATED!** Use `--json_key` instead - The p12 File used to authenticate with Google - - issuer: **DEPRECATED!** Use `--json_key` instead - The issuer of the p12 file (email address of the service account) - - jsonKey: The path to a file containing service account JSON, used to authenticate with Google - - jsonKeyData: The raw service account JSON data used to authenticate with Google - - apk: Path to the APK file to upload - - apkPaths: An array of paths to APK files to upload - - aab: Path to the AAB file to upload - - aabPaths: An array of paths to AAB files to upload - - skipUploadApk: Whether to skip uploading APK - - skipUploadAab: Whether to skip uploading AAB - - skipUploadMetadata: Whether to skip uploading metadata, changelogs not included - - skipUploadChangelogs: Whether to skip uploading changelogs - - skipUploadImages: Whether to skip uploading images, screenshots not included - - skipUploadScreenshots: Whether to skip uploading SCREENSHOTS - - trackPromoteTo: The track to promote to. The default available tracks are: production, beta, alpha, internal - - validateOnly: Only validate changes with Google Play rather than actually publish - - mapping: Path to the mapping file to upload - - mappingPaths: An array of paths to mapping files to upload - - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/ - - checkSupersededTracks: **DEPRECATED!** Google Play does this automatically now - Check the other tracks for superseded versions and disable them - - timeout: Timeout for read, open, and send (in seconds) - - deactivateOnPromote: **DEPRECATED!** Google Play does this automatically now - When promoting to a new track, deactivate the binary in the origin track - - versionCodesToRetain: An array of version codes to retain when publishing a new APK - - inAppUpdatePriority: In-app update priority for all the newly added apks in the release. Can take values between [0,5] - - obbMainReferencesVersion: References version of 'main' expansion file - - obbMainFileSize: Size of 'main' expansion file in bytes - - obbPatchReferencesVersion: References version of 'patch' expansion file - - obbPatchFileSize: Size of 'patch' expansion file in bytes - - More information: https://docs.fastlane.tools/actions/supply/ - */ -func uploadToPlayStore(packageName: String, - versionName: String? = nil, - versionCode: Int? = nil, - releaseStatus: String = "completed", - track: String = "production", - rollout: String? = nil, - metadataPath: String? = nil, - key: String? = nil, - issuer: String? = nil, - jsonKey: String? = nil, - jsonKeyData: String? = nil, - apk: String? = nil, - apkPaths: [String]? = nil, - aab: String? = nil, - aabPaths: [String]? = nil, - skipUploadApk: Bool = false, - skipUploadAab: Bool = false, - skipUploadMetadata: Bool = false, - skipUploadChangelogs: Bool = false, - skipUploadImages: Bool = false, - skipUploadScreenshots: Bool = false, - trackPromoteTo: String? = nil, - validateOnly: Bool = false, - mapping: String? = nil, - mappingPaths: [String]? = nil, - rootUrl: String? = nil, - checkSupersededTracks: Bool = false, - timeout: Int = 300, - deactivateOnPromote: Bool = true, - versionCodesToRetain: [String]? = nil, - inAppUpdatePriority: Int? = nil, - obbMainReferencesVersion: String? = nil, - obbMainFileSize: String? = nil, - obbPatchReferencesVersion: String? = nil, - obbPatchFileSize: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "upload_to_play_store", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName), - RubyCommand.Argument(name: "version_name", value: versionName), - RubyCommand.Argument(name: "version_code", value: versionCode), - RubyCommand.Argument(name: "release_status", value: releaseStatus), - RubyCommand.Argument(name: "track", value: track), - RubyCommand.Argument(name: "rollout", value: rollout), - RubyCommand.Argument(name: "metadata_path", value: metadataPath), - RubyCommand.Argument(name: "key", value: key), - RubyCommand.Argument(name: "issuer", value: issuer), - RubyCommand.Argument(name: "json_key", value: jsonKey), - RubyCommand.Argument(name: "json_key_data", value: jsonKeyData), - RubyCommand.Argument(name: "apk", value: apk), - RubyCommand.Argument(name: "apk_paths", value: apkPaths), - RubyCommand.Argument(name: "aab", value: aab), - RubyCommand.Argument(name: "aab_paths", value: aabPaths), - RubyCommand.Argument(name: "skip_upload_apk", value: skipUploadApk), - RubyCommand.Argument(name: "skip_upload_aab", value: skipUploadAab), - RubyCommand.Argument(name: "skip_upload_metadata", value: skipUploadMetadata), - RubyCommand.Argument(name: "skip_upload_changelogs", value: skipUploadChangelogs), - RubyCommand.Argument(name: "skip_upload_images", value: skipUploadImages), - RubyCommand.Argument(name: "skip_upload_screenshots", value: skipUploadScreenshots), - RubyCommand.Argument(name: "track_promote_to", value: trackPromoteTo), - RubyCommand.Argument(name: "validate_only", value: validateOnly), - RubyCommand.Argument(name: "mapping", value: mapping), - RubyCommand.Argument(name: "mapping_paths", value: mappingPaths), - RubyCommand.Argument(name: "root_url", value: rootUrl), - RubyCommand.Argument(name: "check_superseded_tracks", value: checkSupersededTracks), - RubyCommand.Argument(name: "timeout", value: timeout), - RubyCommand.Argument(name: "deactivate_on_promote", value: deactivateOnPromote), - RubyCommand.Argument(name: "version_codes_to_retain", value: versionCodesToRetain), - RubyCommand.Argument(name: "in_app_update_priority", value: inAppUpdatePriority), - RubyCommand.Argument(name: "obb_main_references_version", value: obbMainReferencesVersion), - RubyCommand.Argument(name: "obb_main_file_size", value: obbMainFileSize), - RubyCommand.Argument(name: "obb_patch_references_version", value: obbPatchReferencesVersion), - RubyCommand.Argument(name: "obb_patch_file_size", value: obbPatchFileSize)]) - _ = runner.executeCommand(command) -} - -/** - Upload binaries to Google Play Internal App Sharing (via _supply_) - - - parameters: - - packageName: The package name of the application to use - - jsonKey: The path to a file containing service account JSON, used to authenticate with Google - - jsonKeyData: The raw service account JSON data used to authenticate with Google - - apk: Path to the APK file to upload - - apkPaths: An array of paths to APK files to upload - - aab: Path to the AAB file to upload - - aabPaths: An array of paths to AAB files to upload - - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/ - - timeout: Timeout for read, open, and send (in seconds) - - - returns: Returns a string containing the download URL for the uploaded APK/AAB (or array of strings if multiple were uploaded). - - More information: https://docs.fastlane.tools/actions/upload_to_play_store_internal_app_sharing/ - */ -func uploadToPlayStoreInternalAppSharing(packageName: String, - jsonKey: String? = nil, - jsonKeyData: String? = nil, - apk: String? = nil, - apkPaths: [String]? = nil, - aab: String? = nil, - aabPaths: [String]? = nil, - rootUrl: String? = nil, - timeout: Int = 300) { - let command = RubyCommand(commandID: "", methodName: "upload_to_play_store_internal_app_sharing", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName), - RubyCommand.Argument(name: "json_key", value: jsonKey), - RubyCommand.Argument(name: "json_key_data", value: jsonKeyData), - RubyCommand.Argument(name: "apk", value: apk), - RubyCommand.Argument(name: "apk_paths", value: apkPaths), - RubyCommand.Argument(name: "aab", value: aab), - RubyCommand.Argument(name: "aab_paths", value: aabPaths), - RubyCommand.Argument(name: "root_url", value: rootUrl), - RubyCommand.Argument(name: "timeout", value: timeout)]) - _ = runner.executeCommand(command) -} - -/** - Upload new binary to App Store Connect for TestFlight beta testing (via _pilot_) - - - parameters: - - username: Your Apple ID Username - - appIdentifier: The bundle identifier of the app to upload or manage testers (optional) - - appPlatform: The platform to use (optional) - - appleId: Apple ID property in the App Information section in App Store Connect - - ipa: Path to the ipa file to upload - - demoAccountRequired: Do you need a demo account when Apple does review? - - betaAppReviewInfo: Beta app review information for contact info and demo account - - localizedAppInfo: Localized beta app test info for description, feedback email, marketing url, and privacy policy - - betaAppDescription: Provide the 'Beta App Description' when uploading a new build - - betaAppFeedbackEmail: Provide the beta app email when uploading a new build - - localizedBuildInfo: Localized beta app test info for what's new - - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog - - skipSubmission: Skip the distributing action of pilot and only upload the ipa file - - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps - - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default - - distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command) - - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist - - distributeExternal: Should the build be distributed to external testers? - - notifyExternalTesters: Should notify external testers? - - appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed - - buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed - - expirePreviousBuilds: Should expire previous builds? - - firstName: The tester's first name - - lastName: The tester's last name - - email: The tester's email - - testersFilePath: Path to a CSV file of testers - - groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","Team 2"` - - teamId: The ID of your App Store Connect team if you're in multiple teams - - teamName: The name of your App Store Connect team if you're in multiple teams - - devPortalTeamId: The short ID of your team in the developer portal, if you're in multiple teams. Different from your iTC team ID! - - itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column - - waitProcessingInterval: Interval in seconds to wait for App Store Connect processing - - waitForUploadedBuild: **DEPRECATED!** No longer needed with the transition over to the App Store Connect API - Use version info from uploaded ipa file to determine what build to use for distribution. If set to false, latest processing or any latest build will be used - - rejectBuildWaitingForReview: Expire previous if it's 'waiting for review' - - More details can be found on https://docs.fastlane.tools/actions/pilot/. - This integration will only do the TestFlight upload. - */ -func uploadToTestflight(username: String, - appIdentifier: String? = nil, - appPlatform: String = "ios", - appleId: String? = nil, - ipa: String? = nil, - demoAccountRequired: Bool = false, - betaAppReviewInfo: [String: Any]? = nil, - localizedAppInfo: [String: Any]? = nil, - betaAppDescription: String? = nil, - betaAppFeedbackEmail: String? = nil, - localizedBuildInfo: [String: Any]? = nil, - changelog: String? = nil, - skipSubmission: Bool = false, - skipWaitingForBuildProcessing: Bool = false, - updateBuildInfoOnUpload: Bool = false, - distributeOnly: Bool = false, - usesNonExemptEncryption: Bool = false, - distributeExternal: Bool = false, - notifyExternalTesters: Bool = true, - appVersion: String? = nil, - buildNumber: String? = nil, - expirePreviousBuilds: Bool = false, - firstName: String? = nil, - lastName: String? = nil, - email: String? = nil, - testersFilePath: String = "./testers.csv", - groups: [String]? = nil, - teamId: Any? = nil, - teamName: String? = nil, - devPortalTeamId: String? = nil, - itcProvider: String? = nil, - waitProcessingInterval: Int = 30, - waitForUploadedBuild: Bool = false, - rejectBuildWaitingForReview: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "upload_to_testflight", className: nil, args: [RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "app_identifier", value: appIdentifier), - RubyCommand.Argument(name: "app_platform", value: appPlatform), - RubyCommand.Argument(name: "apple_id", value: appleId), - RubyCommand.Argument(name: "ipa", value: ipa), - RubyCommand.Argument(name: "demo_account_required", value: demoAccountRequired), - RubyCommand.Argument(name: "beta_app_review_info", value: betaAppReviewInfo), - RubyCommand.Argument(name: "localized_app_info", value: localizedAppInfo), - RubyCommand.Argument(name: "beta_app_description", value: betaAppDescription), - RubyCommand.Argument(name: "beta_app_feedback_email", value: betaAppFeedbackEmail), - RubyCommand.Argument(name: "localized_build_info", value: localizedBuildInfo), - RubyCommand.Argument(name: "changelog", value: changelog), - RubyCommand.Argument(name: "skip_submission", value: skipSubmission), - RubyCommand.Argument(name: "skip_waiting_for_build_processing", value: skipWaitingForBuildProcessing), - RubyCommand.Argument(name: "update_build_info_on_upload", value: updateBuildInfoOnUpload), - RubyCommand.Argument(name: "distribute_only", value: distributeOnly), - RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption), - RubyCommand.Argument(name: "distribute_external", value: distributeExternal), - RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters), - RubyCommand.Argument(name: "app_version", value: appVersion), - RubyCommand.Argument(name: "build_number", value: buildNumber), - RubyCommand.Argument(name: "expire_previous_builds", value: expirePreviousBuilds), - RubyCommand.Argument(name: "first_name", value: firstName), - RubyCommand.Argument(name: "last_name", value: lastName), - RubyCommand.Argument(name: "email", value: email), - RubyCommand.Argument(name: "testers_file_path", value: testersFilePath), - RubyCommand.Argument(name: "groups", value: groups), - RubyCommand.Argument(name: "team_id", value: teamId), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId), - RubyCommand.Argument(name: "itc_provider", value: itcProvider), - RubyCommand.Argument(name: "wait_processing_interval", value: waitProcessingInterval), - RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild), - RubyCommand.Argument(name: "reject_build_waiting_for_review", value: rejectBuildWaitingForReview)]) - _ = runner.executeCommand(command) -} - -/** - Validate that the Google Play Store `json_key` works - - - parameters: - - jsonKey: The path to a file containing service account JSON, used to authenticate with Google - - jsonKeyData: The raw service account JSON data used to authenticate with Google - - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/ - - timeout: Timeout for read, open, and send (in seconds) - - Use this action to test and validate your private key json key file used to connect and authenticate with the Google Play API - */ -func validatePlayStoreJsonKey(jsonKey: String? = nil, - jsonKeyData: String? = nil, - rootUrl: String? = nil, - timeout: Int = 300) { - let command = RubyCommand(commandID: "", methodName: "validate_play_store_json_key", className: nil, args: [RubyCommand.Argument(name: "json_key", value: jsonKey), - RubyCommand.Argument(name: "json_key_data", value: jsonKeyData), - RubyCommand.Argument(name: "root_url", value: rootUrl), - RubyCommand.Argument(name: "timeout", value: timeout)]) - _ = runner.executeCommand(command) -} - -/** - Able to verify various settings in ipa file - - - parameters: - - provisioningType: Required type of provisioning - - provisioningUuid: Required UUID of provisioning profile - - teamIdentifier: Required team identifier - - teamName: Required team name - - appName: Required app name - - bundleIdentifier: Required bundle identifier - - ipaPath: Explicitly set the ipa path - - buildPath: Explicitly set the ipa, app or xcarchive path - - Verifies that the built app was built using the expected build resources. This is relevant for people who build on machines that are used to build apps with different profiles, certificates and/or bundle identifiers to guard against configuration mistakes. - */ -func verifyBuild(provisioningType: String? = nil, - provisioningUuid: String? = nil, - teamIdentifier: String? = nil, - teamName: String? = nil, - appName: String? = nil, - bundleIdentifier: String? = nil, - ipaPath: String? = nil, - buildPath: String? = nil) { - let command = RubyCommand(commandID: "", methodName: "verify_build", className: nil, args: [RubyCommand.Argument(name: "provisioning_type", value: provisioningType), - RubyCommand.Argument(name: "provisioning_uuid", value: provisioningUuid), - RubyCommand.Argument(name: "team_identifier", value: teamIdentifier), - RubyCommand.Argument(name: "team_name", value: teamName), - RubyCommand.Argument(name: "app_name", value: appName), - RubyCommand.Argument(name: "bundle_identifier", value: bundleIdentifier), - RubyCommand.Argument(name: "ipa_path", value: ipaPath), - RubyCommand.Argument(name: "build_path", value: buildPath)]) - _ = runner.executeCommand(command) -} - -/** - Verifies all keys referenced from the Podfile are non-empty - - Runs a check against all keys specified in your Podfile to make sure they're more than a single character long. This is to ensure you don't deploy with stubbed keys. - */ -func verifyPodKeys() { - let command = RubyCommand(commandID: "", methodName: "verify_pod_keys", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Verifies that the Xcode installation is properly signed by Apple - - - parameter xcodePath: The path to the Xcode installation to test - - This action was implemented after the recent Xcode attack to make sure you're not using a [hacked Xcode installation](http://researchcenter.paloaltonetworks.com/2015/09/novel-malware-xcodeghost-modifies-xcode-infects-apple-ios-apps-and-hits-app-store/). - */ -func verifyXcode(xcodePath: String) { - let command = RubyCommand(commandID: "", methodName: "verify_xcode", className: nil, args: [RubyCommand.Argument(name: "xcode_path", value: xcodePath)]) - _ = runner.executeCommand(command) -} - -/** - Increment or set the version in a podspec file - - - parameters: - - path: You must specify the path to the podspec file to update - - bumpType: The type of this version bump. Available: patch, minor, major - - versionNumber: Change to a specific version. This will replace the bump type value - - versionAppendix: Change version appendix to a specific value. For example 1.4.14.4.1 -> 1.4.14.5 - - requireVariablePrefix: true by default, this is used for non CocoaPods version bumps only - - You can use this action to manipulate any 'version' variable contained in a ruby file. - For example, you can use it to bump the version of a CocoaPods' podspec file. - It also supports versions that are not semantic: `1.4.14.4.1`. - For such versions, there is an option to change the appendix (e.g. `4.1`). - */ -func versionBumpPodspec(path: String, - bumpType: String = "patch", - versionNumber: String? = nil, - versionAppendix: String? = nil, - requireVariablePrefix: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "version_bump_podspec", className: nil, args: [RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "bump_type", value: bumpType), - RubyCommand.Argument(name: "version_number", value: versionNumber), - RubyCommand.Argument(name: "version_appendix", value: versionAppendix), - RubyCommand.Argument(name: "require_variable_prefix", value: requireVariablePrefix)]) - _ = runner.executeCommand(command) -} - -/** - Receive the version number from a podspec file - - - parameters: - - path: You must specify the path to the podspec file - - requireVariablePrefix: true by default, this is used for non CocoaPods version bumps only - */ -func versionGetPodspec(path: String, - requireVariablePrefix: Bool = true) { - let command = RubyCommand(commandID: "", methodName: "version_get_podspec", className: nil, args: [RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "require_variable_prefix", value: requireVariablePrefix)]) - _ = runner.executeCommand(command) -} - -/** - Archives the project using `xcodebuild` - */ -func xcarchive() { - let command = RubyCommand(commandID: "", methodName: "xcarchive", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Builds the project using `xcodebuild` - */ -func xcbuild() { - let command = RubyCommand(commandID: "", methodName: "xcbuild", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Cleans the project using `xcodebuild` - */ -func xcclean() { - let command = RubyCommand(commandID: "", methodName: "xcclean", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Exports the project using `xcodebuild` - */ -func xcexport() { - let command = RubyCommand(commandID: "", methodName: "xcexport", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Make sure a certain version of Xcode is installed - - - parameters: - - version: The version number of the version of Xcode to install - - username: Your Apple ID Username - - teamId: The ID of your team if you're in multiple teams - - - returns: The path to the newly installed Xcode version - - Makes sure a specific version of Xcode is installed. If that's not the case, it will automatically be downloaded by the [xcode_install](https://github.com/neonichu/xcode-install) gem. This will make sure to use the correct Xcode for later actions. - */ -@discardableResult func xcodeInstall(version: String, - username: String, - teamId: String? = nil) -> String { - let command = RubyCommand(commandID: "", methodName: "xcode_install", className: nil, args: [RubyCommand.Argument(name: "version", value: version), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "team_id", value: teamId)]) - return runner.executeCommand(command) -} - -/** - Change the xcode-path to use. Useful for beta versions of Xcode - - Select and build with the Xcode installed at the provided path. - Use the `xcversion` action if you want to select an Xcode: - - Based on a version specifier or - - You don't have known, stable paths, as may happen in a CI environment. - */ -func xcodeSelect() { - let command = RubyCommand(commandID: "", methodName: "xcode_select", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Downloads Xcode Bot assets like the `.xcarchive` and logs - - - parameters: - - host: IP Address/Hostname of Xcode Server - - botName: Name of the Bot to pull assets from - - integrationNumber: Optionally you can override which integration's assets should be downloaded. If not provided, the latest integration is used - - username: Username for your Xcode Server - - password: Password for your Xcode Server - - targetFolder: Relative path to a folder into which to download assets - - keepAllAssets: Whether to keep all assets or let the script delete everything except for the .xcarchive - - trustSelfSignedCerts: Whether to trust self-signed certs on your Xcode Server - - This action downloads assets from your Xcode Server Bot (works with Xcode Server using Xcode 6 and 7. By default, this action downloads all assets, unzips them and deletes everything except for the `.xcarchive`. - If you'd like to keep all downloaded assets, pass `keep_all_assets: true`. - This action returns the path to the downloaded assets folder and puts into shared values the paths to the asset folder and to the `.xcarchive` inside it. - */ -@discardableResult func xcodeServerGetAssets(host: String, - botName: String, - integrationNumber: Any? = nil, - username: String = "", - password: String? = nil, - targetFolder: String = "./xcs_assets", - keepAllAssets: Bool = false, - trustSelfSignedCerts: Bool = true) -> [String] { - let command = RubyCommand(commandID: "", methodName: "xcode_server_get_assets", className: nil, args: [RubyCommand.Argument(name: "host", value: host), - RubyCommand.Argument(name: "bot_name", value: botName), - RubyCommand.Argument(name: "integration_number", value: integrationNumber), - RubyCommand.Argument(name: "username", value: username), - RubyCommand.Argument(name: "password", value: password), - RubyCommand.Argument(name: "target_folder", value: targetFolder), - RubyCommand.Argument(name: "keep_all_assets", value: keepAllAssets), - RubyCommand.Argument(name: "trust_self_signed_certs", value: trustSelfSignedCerts)]) - return parseArray(fromString: runner.executeCommand(command)) -} - -/** - Use the `xcodebuild` command to build and sign your app - - **Note**: `xcodebuild` is a complex command, so it is recommended to use [_gym_](https://docs.fastlane.tools/actions/gym/) for building your ipa file and [_scan_](https://docs.fastlane.tools/actions/scan/) for testing your app instead. - */ -func xcodebuild() { - let command = RubyCommand(commandID: "", methodName: "xcodebuild", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Nice code coverage reports without hassle - - - parameters: - - workspace: Path the workspace file - - project: Path the project file - - scheme: The project's scheme. Make sure it's marked as `Shared` - - configuration: The configuration used when building the app. Defaults to 'Release' - - sourceDirectory: The path to project's root directory - - derivedDataPath: The directory where build products and other derived data will go - - outputDirectory: The directory in which all reports will be stored - - htmlReport: Produce an HTML report - - markdownReport: Produce a Markdown report - - jsonReport: Produce a JSON report - - minimumCoveragePercentage: Raise exception if overall coverage percentage is under this value (ie. 75) - - slackUrl: Create an Incoming WebHook for your Slack group to post results there - - slackChannel: #channel or @username - - skipSlack: Don't publish to slack, even when an URL is given - - slackUsername: The username which is used to publish to slack - - slackMessage: The message which is published together with a successful report - - ignoreFilePath: Relative or absolute path to the file containing the list of ignored files - - includeTestTargets: Enables coverage reports for .xctest targets - - excludeTargets: Comma separated list of targets to exclude from coverage report - - includeTargets: Comma separated list of targets to include in coverage report. If specified then exlude_targets will be ignored - - onlyProjectTargets: Display the coverage only for main project targets (e.g. skip Pods targets) - - disableCoveralls: Add this flag to disable automatic submission to Coveralls - - coverallsServiceName: Name of the CI service compatible with Coveralls. i.e. travis-ci. This option must be defined along with coveralls_service_job_id - - coverallsServiceJobId: Name of the current job running on a CI service compatible with Coveralls. This option must be defined along with coveralls_service_name - - coverallsRepoToken: Repository token to be used by integrations not compatible with Coveralls - - xcconfig: Use an extra XCCONFIG file to build your app - - ideFoundationPath: Absolute path to the IDEFoundation.framework binary - - legacySupport: Whether xcov should parse a xccoverage file instead on xccovreport - - Create nice code coverage reports and post coverage summaries on Slack *(xcov gem is required)*. - More information: [https://github.com/nakiostudio/xcov](https://github.com/nakiostudio/xcov). - */ -func xcov(workspace: String? = nil, - project: String? = nil, - scheme: String? = nil, - configuration: String? = nil, - sourceDirectory: String? = nil, - derivedDataPath: String? = nil, - outputDirectory: String = "./xcov_report", - htmlReport: Bool = true, - markdownReport: Bool = false, - jsonReport: Bool = false, - minimumCoveragePercentage: Float = 0, - slackUrl: String? = nil, - slackChannel: String? = nil, - skipSlack: Bool = false, - slackUsername: String = "xcov", - slackMessage: String = "Your *xcov* coverage report", - ignoreFilePath: String = "./.xcovignore", - includeTestTargets: Bool = false, - excludeTargets: String? = nil, - includeTargets: String? = nil, - onlyProjectTargets: Bool = false, - disableCoveralls: Bool = false, - coverallsServiceName: String? = nil, - coverallsServiceJobId: String? = nil, - coverallsRepoToken: String? = nil, - xcconfig: String? = nil, - ideFoundationPath: String = "/Applications/Xcode-11.5.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation", - legacySupport: Bool = false) { - let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace), - RubyCommand.Argument(name: "project", value: project), - RubyCommand.Argument(name: "scheme", value: scheme), - RubyCommand.Argument(name: "configuration", value: configuration), - RubyCommand.Argument(name: "source_directory", value: sourceDirectory), - RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath), - RubyCommand.Argument(name: "output_directory", value: outputDirectory), - RubyCommand.Argument(name: "html_report", value: htmlReport), - RubyCommand.Argument(name: "markdown_report", value: markdownReport), - RubyCommand.Argument(name: "json_report", value: jsonReport), - RubyCommand.Argument(name: "minimum_coverage_percentage", value: minimumCoveragePercentage), - RubyCommand.Argument(name: "slack_url", value: slackUrl), - RubyCommand.Argument(name: "slack_channel", value: slackChannel), - RubyCommand.Argument(name: "skip_slack", value: skipSlack), - RubyCommand.Argument(name: "slack_username", value: slackUsername), - RubyCommand.Argument(name: "slack_message", value: slackMessage), - RubyCommand.Argument(name: "ignore_file_path", value: ignoreFilePath), - RubyCommand.Argument(name: "include_test_targets", value: includeTestTargets), - RubyCommand.Argument(name: "exclude_targets", value: excludeTargets), - RubyCommand.Argument(name: "include_targets", value: includeTargets), - RubyCommand.Argument(name: "only_project_targets", value: onlyProjectTargets), - RubyCommand.Argument(name: "disable_coveralls", value: disableCoveralls), - RubyCommand.Argument(name: "coveralls_service_name", value: coverallsServiceName), - RubyCommand.Argument(name: "coveralls_service_job_id", value: coverallsServiceJobId), - RubyCommand.Argument(name: "coveralls_repo_token", value: coverallsRepoToken), - RubyCommand.Argument(name: "xcconfig", value: xcconfig), - RubyCommand.Argument(name: "ideFoundationPath", value: ideFoundationPath), - RubyCommand.Argument(name: "legacy_support", value: legacySupport)]) - _ = runner.executeCommand(command) -} - -/** - Runs tests on the given simulator - */ -func xctest() { - let command = RubyCommand(commandID: "", methodName: "xctest", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Run tests using xctool - - You can run any `xctool` action. This will require having [xctool](https://github.com/facebook/xctool) installed through [Homebrew](http://brew.sh). - It is recommended to store the build configuration in the `.xctool-args` file. - More information: [https://docs.fastlane.tools/actions/xctool/](https://docs.fastlane.tools/actions/xctool/). - */ -func xctool() { - let command = RubyCommand(commandID: "", methodName: "xctool", className: nil, args: []) - _ = runner.executeCommand(command) -} - -/** - Select an Xcode to use by version specifier - - - parameter version: The version of Xcode to select specified as a Gem::Version requirement string (e.g. '~> 7.1.0') - - Finds and selects a version of an installed Xcode that best matches the provided [`Gem::Version` requirement specifier](http://www.rubydoc.info/github/rubygems/rubygems/Gem/Version) - */ -func xcversion(version: String) { - let command = RubyCommand(commandID: "", methodName: "xcversion", className: nil, args: [RubyCommand.Argument(name: "version", value: version)]) - _ = runner.executeCommand(command) -} - -/** - Compress a file or folder to a zip - - - parameters: - - path: Path to the directory or file to be zipped - - outputPath: The name of the resulting zip file - - verbose: Enable verbose output of zipped file - - password: Encrypt the contents of the zip archive using a password - - symlinks: Store symbolic links as such in the zip archive - - - returns: The path to the output zip file - */ -@discardableResult func zip(path: String, - outputPath: String? = nil, - verbose: Bool = true, - password: String? = nil, - symlinks: Bool = false) -> String { - let command = RubyCommand(commandID: "", methodName: "zip", className: nil, args: [RubyCommand.Argument(name: "path", value: path), - RubyCommand.Argument(name: "output_path", value: outputPath), - RubyCommand.Argument(name: "verbose", value: verbose), - RubyCommand.Argument(name: "password", value: password), - RubyCommand.Argument(name: "symlinks", value: symlinks)]) - return runner.executeCommand(command) -} - -// These are all the parsing functions needed to transform our data into the expected types -func parseArray(fromString: String, function: String = #function) -> [String] { - verbose(message: "parsing an Array from data: \(fromString), from function: \(function)") - let potentialArray: String - if fromString.count < 2 { - potentialArray = "[\(fromString)]" - } else { - potentialArray = fromString - } - let array: [String] = try! JSONSerialization.jsonObject(with: potentialArray.data(using: .utf8)!, options: []) as! [String] - return array -} - -func parseDictionary(fromString: String, function: String = #function) -> [String: String] { - return parseDictionaryHelper(fromString: fromString, function: function) as! [String: String] -} - -func parseDictionary(fromString: String, function: String = #function) -> [String: Any] { - return parseDictionaryHelper(fromString: fromString, function: function) -} - -func parseDictionaryHelper(fromString: String, function: String = #function) -> [String: Any] { - verbose(message: "parsing an Array from data: \(fromString), from function: \(function)") - let potentialDictionary: String - if fromString.count < 2 { - verbose(message: "Dictionary value too small: \(fromString), from function: \(function)") - potentialDictionary = "{}" - } else { - potentialDictionary = fromString - } - let dictionary: [String: Any] = try! JSONSerialization.jsonObject(with: potentialDictionary.data(using: .utf8)!, options: []) as! [String: Any] - return dictionary -} - -func parseBool(fromString: String, function: String = #function) -> Bool { - verbose(message: "parsing a Bool from data: \(fromString), from function: \(function)") - return NSString(string: fromString.trimmingCharacters(in: .punctuationCharacters)).boolValue -} - -func parseInt(fromString: String, function: String = #function) -> Int { - verbose(message: "parsing an Int from data: \(fromString), from function: \(function)") - return NSString(string: fromString.trimmingCharacters(in: .punctuationCharacters)).integerValue -} - -let deliverfile: Deliverfile = Deliverfile() -let gymfile: Gymfile = Gymfile() -let matchfile: Matchfile = Matchfile() -let precheckfile: Precheckfile = Precheckfile() -let scanfile: Scanfile = Scanfile() -let screengrabfile: Screengrabfile = Screengrabfile() -let snapshotfile: Snapshotfile = Snapshotfile() - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.78] diff --git a/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj b/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj deleted file mode 100644 index b81e449ba..000000000 --- a/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,434 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 0311E387230AC1B20060BB5C /* Plugins.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0311E386230AC1B20060BB5C /* Plugins.swift */; }; - 0311E38B230AC9490060BB5C /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0311E38A230AC9490060BB5C /* Actions.swift */; }; - B302067B1F5E3E9000DE6EBD /* SnapshotfileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30206741F5E3E9000DE6EBD /* SnapshotfileProtocol.swift */; }; - B302067C1F5E3E9000DE6EBD /* GymfileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30206751F5E3E9000DE6EBD /* GymfileProtocol.swift */; }; - B302067D1F5E3E9000DE6EBD /* MatchfileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30206761F5E3E9000DE6EBD /* MatchfileProtocol.swift */; }; - B302067E1F5E3E9000DE6EBD /* PrecheckfileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30206771F5E3E9000DE6EBD /* PrecheckfileProtocol.swift */; }; - B302067F1F5E3E9000DE6EBD /* ScanfileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30206781F5E3E9000DE6EBD /* ScanfileProtocol.swift */; }; - B30206801F5E3E9000DE6EBD /* ScreengrabfileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30206791F5E3E9000DE6EBD /* ScreengrabfileProtocol.swift */; }; - B30206811F5E3E9000DE6EBD /* DeliverfileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B302067A1F5E3E9000DE6EBD /* DeliverfileProtocol.swift */; }; - B3BA65A61F5A269100B34850 /* Fastlane.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA659D1F5A269100B34850 /* Fastlane.swift */; }; - B3BA65A71F5A269100B34850 /* LaneFileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA659E1F5A269100B34850 /* LaneFileProtocol.swift */; }; - B3BA65A81F5A269100B34850 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA659F1F5A269100B34850 /* main.swift */; }; - B3BA65A91F5A269100B34850 /* RubyCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65A01F5A269100B34850 /* RubyCommand.swift */; }; - B3BA65AA1F5A269100B34850 /* Runner.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65A11F5A269100B34850 /* Runner.swift */; }; - B3BA65AB1F5A269100B34850 /* SocketClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65A21F5A269100B34850 /* SocketClient.swift */; }; - B3BA65AC1F5A269100B34850 /* SocketClientDelegateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65A31F5A269100B34850 /* SocketClientDelegateProtocol.swift */; }; - B3BA65AD1F5A269100B34850 /* SocketResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65A41F5A269100B34850 /* SocketResponse.swift */; }; - B3BA65AF1F5A2D5C00B34850 /* RunnerArgument.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65AE1F5A2D5C00B34850 /* RunnerArgument.swift */; }; - D55B28C31F6C588300DC42C5 /* Deliverfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28BC1F6C588300DC42C5 /* Deliverfile.swift */; }; - D55B28C41F6C588300DC42C5 /* Gymfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28BD1F6C588300DC42C5 /* Gymfile.swift */; }; - D55B28C51F6C588300DC42C5 /* Matchfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28BE1F6C588300DC42C5 /* Matchfile.swift */; }; - D55B28C61F6C588300DC42C5 /* Precheckfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28BF1F6C588300DC42C5 /* Precheckfile.swift */; }; - D55B28C71F6C588300DC42C5 /* Scanfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28C01F6C588300DC42C5 /* Scanfile.swift */; }; - D55B28C81F6C588300DC42C5 /* Screengrabfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28C11F6C588300DC42C5 /* Screengrabfile.swift */; }; - D55B28C91F6C588300DC42C5 /* Snapshotfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28C21F6C588300DC42C5 /* Snapshotfile.swift */; }; - D5A7C48F1F7C4DAF00A91DE6 /* Appfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5A7C48D1F7C4DAF00A91DE6 /* Appfile.swift */; }; - D5A7C4901F7C4DAF00A91DE6 /* Fastfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5A7C48E1F7C4DAF00A91DE6 /* Fastfile.swift */; }; - D5B8A5B31FFDC49E00536B24 /* ControlCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B8A5B21FFDC49D00536B24 /* ControlCommand.swift */; }; - D5BAFD121F7DAAFC0030B324 /* ArgumentProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5BAFD111F7DAAFC0030B324 /* ArgumentProcessor.swift */; }; - D5D1DE991FFEE8EA00502A00 /* RubyCommandable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5D1DE981FFEE8E900502A00 /* RubyCommandable.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 0311E386230AC1B20060BB5C /* Plugins.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Plugins.swift; path = ../Plugins.swift; sourceTree = ""; }; - 0311E38A230AC9490060BB5C /* Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Actions.swift; path = ../Actions.swift; sourceTree = ""; }; - B30206741F5E3E9000DE6EBD /* SnapshotfileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SnapshotfileProtocol.swift; path = ../SnapshotfileProtocol.swift; sourceTree = ""; }; - B30206751F5E3E9000DE6EBD /* GymfileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GymfileProtocol.swift; path = ../GymfileProtocol.swift; sourceTree = ""; }; - B30206761F5E3E9000DE6EBD /* MatchfileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MatchfileProtocol.swift; path = ../MatchfileProtocol.swift; sourceTree = ""; }; - B30206771F5E3E9000DE6EBD /* PrecheckfileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PrecheckfileProtocol.swift; path = ../PrecheckfileProtocol.swift; sourceTree = ""; }; - B30206781F5E3E9000DE6EBD /* ScanfileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ScanfileProtocol.swift; path = ../ScanfileProtocol.swift; sourceTree = ""; }; - B30206791F5E3E9000DE6EBD /* ScreengrabfileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ScreengrabfileProtocol.swift; path = ../ScreengrabfileProtocol.swift; sourceTree = ""; }; - B302067A1F5E3E9000DE6EBD /* DeliverfileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DeliverfileProtocol.swift; path = ../DeliverfileProtocol.swift; sourceTree = ""; }; - B3144C072005533400470AFE /* README.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - B3144C08200553C800470AFE /* README.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - B3144C09200553D400470AFE /* README.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - B3144C0A200553DC00470AFE /* README.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - B3BA659D1F5A269100B34850 /* Fastlane.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Fastlane.swift; path = ../Fastlane.swift; sourceTree = ""; }; - B3BA659E1F5A269100B34850 /* LaneFileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LaneFileProtocol.swift; path = ../LaneFileProtocol.swift; sourceTree = ""; }; - B3BA659F1F5A269100B34850 /* main.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = main.swift; path = ../main.swift; sourceTree = ""; }; - B3BA65A01F5A269100B34850 /* RubyCommand.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RubyCommand.swift; path = ../RubyCommand.swift; sourceTree = ""; }; - B3BA65A11F5A269100B34850 /* Runner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Runner.swift; path = ../Runner.swift; sourceTree = ""; }; - B3BA65A21F5A269100B34850 /* SocketClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SocketClient.swift; path = ../SocketClient.swift; sourceTree = ""; }; - B3BA65A31F5A269100B34850 /* SocketClientDelegateProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SocketClientDelegateProtocol.swift; path = ../SocketClientDelegateProtocol.swift; sourceTree = ""; }; - B3BA65A41F5A269100B34850 /* SocketResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SocketResponse.swift; path = ../SocketResponse.swift; sourceTree = ""; }; - B3BA65AE1F5A2D5C00B34850 /* RunnerArgument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RunnerArgument.swift; path = ../RunnerArgument.swift; sourceTree = ""; }; - D556D6A91F6A08F5003108E3 /* FastlaneRunner */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = FastlaneRunner; sourceTree = BUILT_PRODUCTS_DIR; }; - D55B28BC1F6C588300DC42C5 /* Deliverfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Deliverfile.swift; path = ../Deliverfile.swift; sourceTree = ""; }; - D55B28BD1F6C588300DC42C5 /* Gymfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Gymfile.swift; path = ../Gymfile.swift; sourceTree = ""; }; - D55B28BE1F6C588300DC42C5 /* Matchfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Matchfile.swift; path = ../Matchfile.swift; sourceTree = ""; }; - D55B28BF1F6C588300DC42C5 /* Precheckfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Precheckfile.swift; path = ../Precheckfile.swift; sourceTree = ""; }; - D55B28C01F6C588300DC42C5 /* Scanfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Scanfile.swift; path = ../Scanfile.swift; sourceTree = ""; }; - D55B28C11F6C588300DC42C5 /* Screengrabfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Screengrabfile.swift; path = ../Screengrabfile.swift; sourceTree = ""; }; - D55B28C21F6C588300DC42C5 /* Snapshotfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Snapshotfile.swift; path = ../Snapshotfile.swift; sourceTree = ""; }; - D5A7C48D1F7C4DAF00A91DE6 /* Appfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Appfile.swift; path = ../../Appfile.swift; sourceTree = ""; }; - D5A7C48E1F7C4DAF00A91DE6 /* Fastfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Fastfile.swift; path = ../../Fastfile.swift; sourceTree = ""; }; - D5B8A5B21FFDC49D00536B24 /* ControlCommand.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ControlCommand.swift; path = ../ControlCommand.swift; sourceTree = ""; }; - D5BAFD111F7DAAFC0030B324 /* ArgumentProcessor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ArgumentProcessor.swift; path = ../ArgumentProcessor.swift; sourceTree = ""; }; - D5D1DE981FFEE8E900502A00 /* RubyCommandable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RubyCommandable.swift; path = ../RubyCommandable.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - B33BAF541F51F8D90001A751 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - B33BAF4E1F51F8D90001A751 = { - isa = PBXGroup; - children = ( - B3BA65B01F5A324A00B34850 /* Fastlane Runner */, - D556D6A91F6A08F5003108E3 /* FastlaneRunner */, - ); - sourceTree = ""; - }; - B3BA65B01F5A324A00B34850 /* Fastlane Runner */ = { - isa = PBXGroup; - children = ( - B3BA65B21F5A327B00B34850 /* Autogenerated API */, - B3BA65B31F5A329800B34850 /* Fastfile Components */, - B3BA65B11F5A325E00B34850 /* Networking */, - D512BA011F7C7F40000D2137 /* Runner Code */, - D5A7C48D1F7C4DAF00A91DE6 /* Appfile.swift */, - D55B28BC1F6C588300DC42C5 /* Deliverfile.swift */, - D5A7C48E1F7C4DAF00A91DE6 /* Fastfile.swift */, - D55B28BD1F6C588300DC42C5 /* Gymfile.swift */, - D55B28BE1F6C588300DC42C5 /* Matchfile.swift */, - D55B28BF1F6C588300DC42C5 /* Precheckfile.swift */, - D55B28C01F6C588300DC42C5 /* Scanfile.swift */, - D55B28C11F6C588300DC42C5 /* Screengrabfile.swift */, - D55B28C21F6C588300DC42C5 /* Snapshotfile.swift */, - ); - name = "Fastlane Runner"; - sourceTree = ""; - }; - B3BA65B11F5A325E00B34850 /* Networking */ = { - isa = PBXGroup; - children = ( - B3144C072005533400470AFE /* README.txt */, - D5B8A5B21FFDC49D00536B24 /* ControlCommand.swift */, - B3BA65A01F5A269100B34850 /* RubyCommand.swift */, - D5D1DE981FFEE8E900502A00 /* RubyCommandable.swift */, - B3BA65A11F5A269100B34850 /* Runner.swift */, - B3BA65A21F5A269100B34850 /* SocketClient.swift */, - B3BA65A31F5A269100B34850 /* SocketClientDelegateProtocol.swift */, - B3BA65A41F5A269100B34850 /* SocketResponse.swift */, - ); - name = Networking; - sourceTree = ""; - }; - B3BA65B21F5A327B00B34850 /* Autogenerated API */ = { - isa = PBXGroup; - children = ( - B3144C09200553D400470AFE /* README.txt */, - 0311E38A230AC9490060BB5C /* Actions.swift */, - B3BA659D1F5A269100B34850 /* Fastlane.swift */, - B302067A1F5E3E9000DE6EBD /* DeliverfileProtocol.swift */, - B30206751F5E3E9000DE6EBD /* GymfileProtocol.swift */, - B30206761F5E3E9000DE6EBD /* MatchfileProtocol.swift */, - 0311E386230AC1B20060BB5C /* Plugins.swift */, - B30206771F5E3E9000DE6EBD /* PrecheckfileProtocol.swift */, - B30206781F5E3E9000DE6EBD /* ScanfileProtocol.swift */, - B30206791F5E3E9000DE6EBD /* ScreengrabfileProtocol.swift */, - B30206741F5E3E9000DE6EBD /* SnapshotfileProtocol.swift */, - ); - name = "Autogenerated API"; - sourceTree = ""; - }; - B3BA65B31F5A329800B34850 /* Fastfile Components */ = { - isa = PBXGroup; - children = ( - B3144C08200553C800470AFE /* README.txt */, - B3BA659E1F5A269100B34850 /* LaneFileProtocol.swift */, - ); - name = "Fastfile Components"; - sourceTree = ""; - }; - D512BA011F7C7F40000D2137 /* Runner Code */ = { - isa = PBXGroup; - children = ( - B3144C0A200553DC00470AFE /* README.txt */, - D5BAFD111F7DAAFC0030B324 /* ArgumentProcessor.swift */, - B3BA659F1F5A269100B34850 /* main.swift */, - B3BA65AE1F5A2D5C00B34850 /* RunnerArgument.swift */, - ); - name = "Runner Code"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - B33BAF561F51F8D90001A751 /* FastlaneRunner */ = { - isa = PBXNativeTarget; - buildConfigurationList = B33BAF5E1F51F8D90001A751 /* Build configuration list for PBXNativeTarget "FastlaneRunner" */; - buildPhases = ( - B33BAF531F51F8D90001A751 /* Sources */, - B33BAF541F51F8D90001A751 /* Frameworks */, - D529C72B1F68BB1C0036536D /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FastlaneRunner; - productName = FastlaneSwiftRunner; - productReference = D556D6A91F6A08F5003108E3 /* FastlaneRunner */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - B33BAF4F1F51F8D90001A751 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 0900; - ORGANIZATIONNAME = "Joshua Liebowitz"; - TargetAttributes = { - B33BAF561F51F8D90001A751 = { - CreatedOnToolsVersion = 8.3.3; - LastSwiftMigration = 0900; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = B33BAF521F51F8D90001A751 /* Build configuration list for PBXProject "FastlaneSwiftRunner" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - ); - mainGroup = B33BAF4E1F51F8D90001A751; - productRefGroup = B33BAF4E1F51F8D90001A751; - projectDirPath = ""; - projectRoot = ""; - targets = ( - B33BAF561F51F8D90001A751 /* FastlaneRunner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXShellScriptBuildPhase section */ - D529C72B1F68BB1C0036536D /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "cd \"${SRCROOT}\"\ncd ../..\ncp \"${TARGET_BUILD_DIR}/${EXECUTABLE_PATH}\" ."; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - B33BAF531F51F8D90001A751 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B3BA65A91F5A269100B34850 /* RubyCommand.swift in Sources */, - D5D1DE991FFEE8EA00502A00 /* RubyCommandable.swift in Sources */, - D55B28C41F6C588300DC42C5 /* Gymfile.swift in Sources */, - B302067D1F5E3E9000DE6EBD /* MatchfileProtocol.swift in Sources */, - B3BA65AC1F5A269100B34850 /* SocketClientDelegateProtocol.swift in Sources */, - B3BA65A71F5A269100B34850 /* LaneFileProtocol.swift in Sources */, - D55B28C61F6C588300DC42C5 /* Precheckfile.swift in Sources */, - B302067F1F5E3E9000DE6EBD /* ScanfileProtocol.swift in Sources */, - D55B28C51F6C588300DC42C5 /* Matchfile.swift in Sources */, - B30206801F5E3E9000DE6EBD /* ScreengrabfileProtocol.swift in Sources */, - D5BAFD121F7DAAFC0030B324 /* ArgumentProcessor.swift in Sources */, - B302067C1F5E3E9000DE6EBD /* GymfileProtocol.swift in Sources */, - B302067B1F5E3E9000DE6EBD /* SnapshotfileProtocol.swift in Sources */, - D55B28C31F6C588300DC42C5 /* Deliverfile.swift in Sources */, - D5A7C4901F7C4DAF00A91DE6 /* Fastfile.swift in Sources */, - 0311E38B230AC9490060BB5C /* Actions.swift in Sources */, - D5A7C48F1F7C4DAF00A91DE6 /* Appfile.swift in Sources */, - B3BA65AB1F5A269100B34850 /* SocketClient.swift in Sources */, - B30206811F5E3E9000DE6EBD /* DeliverfileProtocol.swift in Sources */, - B3BA65AA1F5A269100B34850 /* Runner.swift in Sources */, - B3BA65AF1F5A2D5C00B34850 /* RunnerArgument.swift in Sources */, - D5B8A5B31FFDC49E00536B24 /* ControlCommand.swift in Sources */, - B302067E1F5E3E9000DE6EBD /* PrecheckfileProtocol.swift in Sources */, - B3BA65AD1F5A269100B34850 /* SocketResponse.swift in Sources */, - B3BA65A81F5A269100B34850 /* main.swift in Sources */, - D55B28C71F6C588300DC42C5 /* Scanfile.swift in Sources */, - 0311E387230AC1B20060BB5C /* Plugins.swift in Sources */, - D55B28C91F6C588300DC42C5 /* Snapshotfile.swift in Sources */, - B3BA65A61F5A269100B34850 /* Fastlane.swift in Sources */, - D55B28C81F6C588300DC42C5 /* Screengrabfile.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - B33BAF5C1F51F8D90001A751 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.12; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = Off; - }; - name = Debug; - }; - B33BAF5D1F51F8D90001A751 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.12; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_SWIFT3_OBJC_INFERENCE = Off; - }; - name = Release; - }; - B33BAF5F1F51F8D90001A751 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; - }; - name = Debug; - }; - B33BAF601F51F8D90001A751 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - B33BAF521F51F8D90001A751 /* Build configuration list for PBXProject "FastlaneSwiftRunner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B33BAF5C1F51F8D90001A751 /* Debug */, - B33BAF5D1F51F8D90001A751 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B33BAF5E1F51F8D90001A751 /* Build configuration list for PBXNativeTarget "FastlaneRunner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B33BAF5F1F51F8D90001A751 /* Debug */, - B33BAF601F51F8D90001A751 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = B33BAF4F1F51F8D90001A751 /* Project object */; -} diff --git a/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 44be89b1f..000000000 --- a/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003..000000000 --- a/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme b/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme deleted file mode 100644 index 794da9576..000000000 --- a/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/fastlane/swift/FastlaneSwiftRunner/README.txt b/fastlane/swift/FastlaneSwiftRunner/README.txt deleted file mode 100644 index 108ac83f7..000000000 --- a/fastlane/swift/FastlaneSwiftRunner/README.txt +++ /dev/null @@ -1,10 +0,0 @@ - Don't modify the structure of this group including but not limited to: -- renaming this group -- adding sub groups -- removing sub groups -- adding new files -- removing files - -If you modify anything in this folder, future fastlane upgrades may not be able to be applied automatically. - -If you need to add new groups, please add them at the root of the "Fastlane Runner" group. diff --git a/fastlane/swift/Gymfile.swift b/fastlane/swift/Gymfile.swift deleted file mode 100644 index 2a0ce258e..000000000 --- a/fastlane/swift/Gymfile.swift +++ /dev/null @@ -1,21 +0,0 @@ -// This class is automatically included in FastlaneRunner during build - -// This autogenerated file will be overwritten or replaced during build time, or when you initialize `gym` -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -class Gymfile: GymfileProtocol { -// If you want to enable `gym`, run `fastlane gym init` -// After, this file will be replaced with a custom implementation that contains values you supplied -// during the `init` process, and you won't see this message -} - - - - - -// Generated with fastlane 2.135.2 diff --git a/fastlane/swift/GymfileProtocol.swift b/fastlane/swift/GymfileProtocol.swift deleted file mode 100644 index ffa57545a..000000000 --- a/fastlane/swift/GymfileProtocol.swift +++ /dev/null @@ -1,184 +0,0 @@ -protocol GymfileProtocol: class { - /// Path to the workspace file - var workspace: String? { get } - - /// Path to the project file - var project: String? { get } - - /// The project's scheme. Make sure it's marked as `Shared` - var scheme: String? { get } - - /// Should the project be cleaned before building it? - var clean: Bool { get } - - /// The directory in which the ipa file should be stored in - var outputDirectory: String { get } - - /// The name of the resulting ipa file - var outputName: String? { get } - - /// The configuration to use when building the app. Defaults to 'Release' - var configuration: String? { get } - - /// Hide all information that's not necessary while building - var silent: Bool { get } - - /// The name of the code signing identity to use. It has to match the name exactly. e.g. 'iPhone Distribution: SunApps GmbH' - var codesigningIdentity: String? { get } - - /// Should we skip packaging the ipa? - var skipPackageIpa: Bool { get } - - /// Should we skip packaging the pkg? - var skipPackagePkg: Bool { get } - - /// Should the ipa file include symbols? - var includeSymbols: Bool? { get } - - /// Should the ipa file include bitcode? - var includeBitcode: Bool? { get } - - /// Method used to export the archive. Valid values are: app-store, ad-hoc, package, enterprise, development, developer-id - var exportMethod: String? { get } - - /// Path to an export options plist or a hash with export options. Use 'xcodebuild -help' to print the full set of available options - var exportOptions: [String: Any]? { get } - - /// Pass additional arguments to xcodebuild for the package phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - var exportXcargs: String? { get } - - /// Export ipa from previously built xcarchive. Uses archive_path as source - var skipBuildArchive: Bool? { get } - - /// After building, don't archive, effectively not including -archivePath param - var skipArchive: Bool? { get } - - /// Build without codesigning - var skipCodesigning: Bool? { get } - - /// Platform to build when using a Catalyst enabled app. Valid values are: ios, macos - var catalystPlatform: String? { get } - - /// Full name of 3rd Party Mac Developer Installer or Developer ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)` - var installerCertName: String? { get } - - /// The directory in which the archive should be stored in - var buildPath: String? { get } - - /// The path to the created archive - var archivePath: String? { get } - - /// The directory where built products and other derived data will go - var derivedDataPath: String? { get } - - /// Should an Xcode result bundle be generated in the output directory - var resultBundle: Bool { get } - - /// Path to the result bundle directory to create. Ignored if `result_bundle` if false - var resultBundlePath: String? { get } - - /// The directory where to store the build log - var buildlogPath: String { get } - - /// The SDK that should be used for building the application - var sdk: String? { get } - - /// The toolchain that should be used for building the application (e.g. com.apple.dt.toolchain.Swift_2_3, org.swift.30p620160816a) - var toolchain: String? { get } - - /// Use a custom destination for building the app - var destination: String? { get } - - /// Optional: Sometimes you need to specify a team id when exporting the ipa file - var exportTeamId: String? { get } - - /// Pass additional arguments to xcodebuild for the build phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - var xcargs: String? { get } - - /// Use an extra XCCONFIG file to build your app - var xcconfig: String? { get } - - /// Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path - var suppressXcodeOutput: Bool? { get } - - /// Disable xcpretty formatting of build output - var disableXcpretty: Bool? { get } - - /// Use the test (RSpec style) format for build output - var xcprettyTestFormat: Bool? { get } - - /// A custom xcpretty formatter to use - var xcprettyFormatter: String? { get } - - /// Have xcpretty create a JUnit-style XML report at the provided path - var xcprettyReportJunit: String? { get } - - /// Have xcpretty create a simple HTML report at the provided path - var xcprettyReportHtml: String? { get } - - /// Have xcpretty create a JSON compilation database at the provided path - var xcprettyReportJson: String? { get } - - /// Analyze the project build time and store the output in 'culprits.txt' file - var analyzeBuildTime: Bool? { get } - - /// Have xcpretty use unicode encoding when reporting builds - var xcprettyUtf: Bool? { get } - - /// Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used - var skipProfileDetection: Bool { get } - - /// Sets a custom path for Swift Package Manager dependencies - var clonedSourcePackagesPath: String? { get } -} - -extension GymfileProtocol { - var workspace: String? { return nil } - var project: String? { return nil } - var scheme: String? { return nil } - var clean: Bool { return false } - var outputDirectory: String { return "." } - var outputName: String? { return nil } - var configuration: String? { return nil } - var silent: Bool { return false } - var codesigningIdentity: String? { return nil } - var skipPackageIpa: Bool { return false } - var skipPackagePkg: Bool { return false } - var includeSymbols: Bool? { return nil } - var includeBitcode: Bool? { return nil } - var exportMethod: String? { return nil } - var exportOptions: [String: Any]? { return nil } - var exportXcargs: String? { return nil } - var skipBuildArchive: Bool? { return nil } - var skipArchive: Bool? { return nil } - var skipCodesigning: Bool? { return nil } - var catalystPlatform: String? { return nil } - var installerCertName: String? { return nil } - var buildPath: String? { return nil } - var archivePath: String? { return nil } - var derivedDataPath: String? { return nil } - var resultBundle: Bool { return false } - var resultBundlePath: String? { return nil } - var buildlogPath: String { return "~/Library/Logs/gym" } - var sdk: String? { return nil } - var toolchain: String? { return nil } - var destination: String? { return nil } - var exportTeamId: String? { return nil } - var xcargs: String? { return nil } - var xcconfig: String? { return nil } - var suppressXcodeOutput: Bool? { return nil } - var disableXcpretty: Bool? { return nil } - var xcprettyTestFormat: Bool? { return nil } - var xcprettyFormatter: String? { return nil } - var xcprettyReportJunit: String? { return nil } - var xcprettyReportHtml: String? { return nil } - var xcprettyReportJson: String? { return nil } - var analyzeBuildTime: Bool? { return nil } - var xcprettyUtf: Bool? { return nil } - var skipProfileDetection: Bool { return false } - var clonedSourcePackagesPath: String? { return nil } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.28] diff --git a/fastlane/swift/LaneFileProtocol.swift b/fastlane/swift/LaneFileProtocol.swift deleted file mode 100644 index 520535ae5..000000000 --- a/fastlane/swift/LaneFileProtocol.swift +++ /dev/null @@ -1,140 +0,0 @@ -// -// LaneFileProtocol.swift -// FastlaneSwiftRunner -// -// Created by Joshua Liebowitz on 8/4/17. -// - -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Foundation - -public protocol LaneFileProtocol: class { - var fastlaneVersion: String { get } - static func runLane(named: String, parameters: [String: String]) -> Bool - - func recordLaneDescriptions() - func beforeAll() - func afterAll(currentLane: String) - func onError(currentLane: String, errorInfo: String) -} - -public extension LaneFileProtocol { - var fastlaneVersion: String { return "" } // default "" because that means any is fine - func beforeAll() {} // no op by default - func afterAll(currentLane _: String) {} // no op by default - func onError(currentLane _: String, errorInfo _: String) {} // no op by default - func recordLaneDescriptions() {} // no op by default -} - -@objcMembers -public class LaneFile: NSObject, LaneFileProtocol { - private(set) static var fastfileInstance: Fastfile? - - // Called before any lane is executed. - private func setupAllTheThings() { - LaneFile.fastfileInstance!.beforeAll() - } - - private static func trimLaneFromName(laneName: String) -> String { - return String(laneName.prefix(laneName.count - 4)) - } - - private static func trimLaneWithOptionsFromName(laneName: String) -> String { - return String(laneName.prefix(laneName.count - 12)) - } - - private static var laneFunctionNames: [String] { - var lanes: [String] = [] - var methodCount: UInt32 = 0 - let methodList = class_copyMethodList(self, &methodCount) - for i in 0 ..< Int(methodCount) { - let selName = sel_getName(method_getName(methodList![i])) - let name = String(cString: selName) - let lowercasedName = name.lowercased() - if lowercasedName.hasSuffix("lane") || lowercasedName.hasSuffix("lanewithoptions:") { - lanes.append(name) - } - } - return lanes - } - - public static var lanes: [String: String] { - var laneToMethodName: [String: String] = [:] - laneFunctionNames.forEach { name in - let lowercasedName = name.lowercased() - if lowercasedName.hasSuffix("lane") { - laneToMethodName[lowercasedName] = name - let lowercasedNameNoLane = trimLaneFromName(laneName: lowercasedName) - laneToMethodName[lowercasedNameNoLane] = name - } else if lowercasedName.hasSuffix("lanewithoptions:") { - let lowercasedNameNoOptions = trimLaneWithOptionsFromName(laneName: lowercasedName) - laneToMethodName[lowercasedNameNoOptions] = name - let lowercasedNameNoLane = trimLaneFromName(laneName: lowercasedNameNoOptions) - laneToMethodName[lowercasedNameNoLane] = name - } - } - - return laneToMethodName - } - - public static func loadFastfile() { - if fastfileInstance == nil { - let fastfileType: AnyObject.Type = NSClassFromString(className())! - let fastfileAsNSObjectType: NSObject.Type = fastfileType as! NSObject.Type - let currentFastfileInstance: Fastfile? = fastfileAsNSObjectType.init() as? Fastfile - fastfileInstance = currentFastfileInstance - } - } - - public static func runLane(named: String, parameters: [String: String]) -> Bool { - log(message: "Running lane: \(named)") - loadFastfile() - - guard let fastfileInstance: Fastfile = self.fastfileInstance else { - let message = "Unable to instantiate class named: \(className())" - log(message: message) - fatalError(message) - } - - let currentLanes = lanes - let lowerCasedLaneRequested = named.lowercased() - - guard let laneMethod = currentLanes[lowerCasedLaneRequested] else { - let laneNames = laneFunctionNames.map { laneFuctionName in - if laneFuctionName.hasSuffix("lanewithoptions:") { - return trimLaneWithOptionsFromName(laneName: laneFuctionName) - } else { - return trimLaneFromName(laneName: laneFuctionName) - } - }.joined(separator: ", ") - - let message = "[!] Could not find lane '\(named)'. Available lanes: \(laneNames)" - log(message: message) - - let shutdownCommand = ControlCommand(commandType: .cancel(cancelReason: .clientError), message: message) - _ = runner.executeCommand(shutdownCommand) - return false - } - - // call all methods that need to be called before we start calling lanes - fastfileInstance.setupAllTheThings() - - // We need to catch all possible errors here and display a nice message - _ = fastfileInstance.perform(NSSelectorFromString(laneMethod), with: parameters) - - // only call on success - fastfileInstance.afterAll(currentLane: named) - log(message: "Done running lane: \(named) 🚀") - return true - } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.2] diff --git a/fastlane/swift/Matchfile.swift b/fastlane/swift/Matchfile.swift deleted file mode 100644 index 82c9d9033..000000000 --- a/fastlane/swift/Matchfile.swift +++ /dev/null @@ -1,21 +0,0 @@ -// This class is automatically included in FastlaneRunner during build - -// This autogenerated file will be overwritten or replaced during build time, or when you initialize `match` -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -class Matchfile: MatchfileProtocol { -// If you want to enable `match`, run `fastlane match init` -// After, this file will be replaced with a custom implementation that contains values you supplied -// during the `init` process, and you won't see this message -} - - - - - -// Generated with fastlane 2.135.2 diff --git a/fastlane/swift/MatchfileProtocol.swift b/fastlane/swift/MatchfileProtocol.swift deleted file mode 100644 index a0042fbb4..000000000 --- a/fastlane/swift/MatchfileProtocol.swift +++ /dev/null @@ -1,160 +0,0 @@ -protocol MatchfileProtocol: class { - /// Define the profile type, can be appstore, adhoc, development, enterprise, developer_id - var type: String { get } - - /// Create additional cert types needed for macOS installers (valid values: mac_installer_distribution, developer_id_installer) - var additionalCertTypes: [String]? { get } - - /// Only fetch existing certificates and profiles, don't generate new ones - var readonly: Bool { get } - - /// Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution) - var generateAppleCerts: Bool { get } - - /// Skip syncing provisioning profiles - var skipProvisioningProfiles: Bool { get } - - /// The bundle identifier(s) of your app (comma-separated) - var appIdentifier: [String] { get } - - /// Your Apple ID Username - var username: String { get } - - /// The ID of your Developer Portal team if you're in multiple teams - var teamId: String? { get } - - /// The name of your Developer Portal team if you're in multiple teams - var teamName: String? { get } - - /// Define where you want to store your certificates - var storageMode: String { get } - - /// URL to the git repo containing all the certificates - var gitUrl: String { get } - - /// Specific git branch to use - var gitBranch: String { get } - - /// git user full name to commit - var gitFullName: String? { get } - - /// git user email to commit - var gitUserEmail: String? { get } - - /// Make a shallow clone of the repository (truncate the history to 1 revision) - var shallowClone: Bool { get } - - /// Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail - var cloneBranchDirectly: Bool { get } - - /// Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64 - var gitBasicAuthorization: String? { get } - - /// Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64 - var gitBearerAuthorization: String? { get } - - /// Name of the Google Cloud Storage bucket to use - var googleCloudBucketName: String? { get } - - /// Path to the gc_keys.json file - var googleCloudKeysFile: String? { get } - - /// ID of the Google Cloud project to use for authentication - var googleCloudProjectId: String? { get } - - /// Name of the S3 region - var s3Region: String? { get } - - /// S3 access key - var s3AccessKey: String? { get } - - /// S3 secret access key - var s3SecretAccessKey: String? { get } - - /// Name of the S3 bucket - var s3Bucket: String? { get } - - /// Prefix to be used on all objects uploaded to S3 - var s3ObjectPrefix: String? { get } - - /// Keychain the items should be imported to - var keychainName: String { get } - - /// This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password - var keychainPassword: String? { get } - - /// Renew the provisioning profiles every time you run match - var force: Bool { get } - - /// Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile type 'appstore' - var forceForNewDevices: Bool { get } - - /// Disables confirmation prompts during nuke, answering them with yes - var skipConfirmation: Bool { get } - - /// Skip generation of a README.md for the created git repository - var skipDocs: Bool { get } - - /// Set the provisioning profile's platform to work with (i.e. ios, tvos, macos) - var platform: String { get } - - /// The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. "Apple Pay Pass Suppression Development") - var templateName: String? { get } - - /// A custom name for the provisioning profile. This will replace the default provisioning profile name if specified - var profileName: String? { get } - - /// Should the command fail if it was about to create a duplicate of an existing provisioning profile. It can happen due to issues on Apple Developer Portal, when profile to be recreated was not properly deleted first - var failOnNameTaken: Bool { get } - - /// Path in which to export certificates, key and profile - var outputPath: String? { get } - - /// Print out extra information and all commands - var verbose: Bool { get } -} - -extension MatchfileProtocol { - var type: String { return "development" } - var additionalCertTypes: [String]? { return nil } - var readonly: Bool { return false } - var generateAppleCerts: Bool { return true } - var skipProvisioningProfiles: Bool { return false } - var appIdentifier: [String] { return [] } - var username: String { return "" } - var teamId: String? { return nil } - var teamName: String? { return nil } - var storageMode: String { return "git" } - var gitUrl: String { return "" } - var gitBranch: String { return "master" } - var gitFullName: String? { return nil } - var gitUserEmail: String? { return nil } - var shallowClone: Bool { return false } - var cloneBranchDirectly: Bool { return false } - var gitBasicAuthorization: String? { return nil } - var gitBearerAuthorization: String? { return nil } - var googleCloudBucketName: String? { return nil } - var googleCloudKeysFile: String? { return nil } - var googleCloudProjectId: String? { return nil } - var s3Region: String? { return nil } - var s3AccessKey: String? { return nil } - var s3SecretAccessKey: String? { return nil } - var s3Bucket: String? { return nil } - var s3ObjectPrefix: String? { return nil } - var keychainName: String { return "login.keychain" } - var keychainPassword: String? { return nil } - var force: Bool { return false } - var forceForNewDevices: Bool { return false } - var skipConfirmation: Bool { return false } - var skipDocs: Bool { return false } - var platform: String { return "ios" } - var templateName: String? { return nil } - var profileName: String? { return nil } - var failOnNameTaken: Bool { return false } - var outputPath: String? { return nil } - var verbose: Bool { return false } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.22] diff --git a/fastlane/swift/Plugins.swift b/fastlane/swift/Plugins.swift deleted file mode 100644 index e7b02c97e..000000000 --- a/fastlane/swift/Plugins.swift +++ /dev/null @@ -1,15 +0,0 @@ -// This class is automatically included in FastlaneRunner during build - -// This autogenerated file will be overwritten or replaced when installing/updating plugins or running "fastlane generate_swift" -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Foundation - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.56] diff --git a/fastlane/swift/Precheckfile.swift b/fastlane/swift/Precheckfile.swift deleted file mode 100644 index 42efadb7f..000000000 --- a/fastlane/swift/Precheckfile.swift +++ /dev/null @@ -1,21 +0,0 @@ -// This class is automatically included in FastlaneRunner during build - -// This autogenerated file will be overwritten or replaced during build time, or when you initialize `precheck` -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -class Precheckfile: PrecheckfileProtocol { -// If you want to enable `precheck`, run `fastlane precheck init` -// After, this file will be replaced with a custom implementation that contains values you supplied -// during the `init` process, and you won't see this message -} - - - - - -// Generated with fastlane 2.135.2 diff --git a/fastlane/swift/PrecheckfileProtocol.swift b/fastlane/swift/PrecheckfileProtocol.swift deleted file mode 100644 index 252592a42..000000000 --- a/fastlane/swift/PrecheckfileProtocol.swift +++ /dev/null @@ -1,36 +0,0 @@ -protocol PrecheckfileProtocol: class { - /// The bundle identifier of your app - var appIdentifier: String { get } - - /// Your Apple ID Username - var username: String { get } - - /// The ID of your App Store Connect team if you're in multiple teams - var teamId: String? { get } - - /// The name of your App Store Connect team if you're in multiple teams - var teamName: String? { get } - - /// The default rule level unless otherwise configured - var defaultRuleLevel: String { get } - - /// Should check in-app purchases? - var includeInAppPurchases: Bool { get } - - /// using text indicating that your IAP is free - var freeStuffInIap: String? { get } -} - -extension PrecheckfileProtocol { - var appIdentifier: String { return "" } - var username: String { return "" } - var teamId: String? { return nil } - var teamName: String? { return nil } - var defaultRuleLevel: String { return "error" } - var includeInAppPurchases: Bool { return true } - var freeStuffInIap: String? { return nil } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.21] diff --git a/fastlane/swift/RubyCommand.swift b/fastlane/swift/RubyCommand.swift deleted file mode 100644 index 4b5b80e0c..000000000 --- a/fastlane/swift/RubyCommand.swift +++ /dev/null @@ -1,161 +0,0 @@ -// -// RubyCommand.swift -// FastlaneSwiftRunner -// -// Created by Joshua Liebowitz on 8/4/17. -// - -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Foundation - -struct RubyCommand: RubyCommandable { - var type: CommandType { return .action } - - struct Argument { - enum ArgType { - case stringClosure - - var typeString: String { - switch self { - case .stringClosure: - return "string_closure" // this should match when is in ruby's SocketServerActionCommandExecutor - } - } - } - - let name: String - let value: Any? - let type: ArgType? - - init(name: String, value: Any?, type: ArgType? = nil) { - self.name = name - self.value = value - self.type = type - } - - var hasValue: Bool { - return value != nil - } - - var json: String { - if let someValue = value { - let typeJson: String - if let type = type { - typeJson = ", \"value_type\" : \"\(type.typeString)\"" - } else { - typeJson = "" - } - - if type == .stringClosure { - return "{\"name\" : \"\(name)\", \"value\" : \"ignored_for_closure\"\(typeJson)}" - } else if let array = someValue as? [String] { - return "{\"name\" : \"\(name)\", \"value\" : \"\(array.joined(separator: ","))\"\(typeJson)}" - } else if let hash = someValue as? [String: Any] { - let jsonData = try! JSONSerialization.data(withJSONObject: hash, options: []) - let jsonString = String(data: jsonData, encoding: .utf8)! - return "{\"name\" : \"\(name)\", \"value\" : \(jsonString)\(typeJson)}" - } else { - let dictionary = [ - "name": name, - "value": someValue, - ] - let jsonData = try! JSONSerialization.data(withJSONObject: dictionary, options: []) - let jsonString = String(data: jsonData, encoding: .utf8)! - return jsonString - } - } else { - // Just exclude this arg if it doesn't have a value - return "" - } - } - } - - let commandID: String - let methodName: String - let className: String? - let args: [Argument] - let id: String = UUID().uuidString - - var closure: ((String) -> Void)? { - let callbacks = args.filter { ($0.type != nil) && $0.type == .stringClosure } - guard let callback = callbacks.first else { - return nil - } - - guard let callbackArgValue = callback.value else { - return nil - } - - guard let callbackClosure = callbackArgValue as? ((String) -> Void) else { - return nil - } - return callbackClosure - } - - func callbackClosure(_ callbackArg: String) -> ((String) -> Void)? { - // WARNING: This will perform the first callback it receives - let callbacks = args.filter { ($0.type != nil) && $0.type == .stringClosure } - guard let callback = callbacks.first else { - verbose(message: "received call to performCallback with \(callbackArg), but no callback available to perform") - return nil - } - - guard let callbackArgValue = callback.value else { - verbose(message: "received call to performCallback with \(callbackArg), but callback is nil") - return nil - } - - guard let callbackClosure = callbackArgValue as? ((String) -> Void) else { - verbose(message: "received call to performCallback with \(callbackArg), but callback type is unknown \(callbackArgValue.self)") - return nil - } - return callbackClosure - } - - func performCallback(callbackArg: String, socket: SocketClient, completion: @escaping () -> Void) { - verbose(message: "Performing callback with: \(callbackArg)") - socket.leave() - callbackClosure(callbackArg)?(callbackArg) - completion() - } - - var commandJson: String { - let argsArrayJson = args - .map { $0.json } - .filter { $0 != "" } - - let argsJson: String? - if !argsArrayJson.isEmpty { - argsJson = "\"args\" : [\(argsArrayJson.joined(separator: ","))]" - } else { - argsJson = nil - } - - let commandIDJson = "\"commandID\" : \"\(commandID)\"" - let methodNameJson = "\"methodName\" : \"\(methodName)\"" - - var jsonParts = [commandIDJson, methodNameJson] - if let argsJson = argsJson { - jsonParts.append(argsJson) - } - - if let className = className { - let classNameJson = "\"className\" : \"\(className)\"" - jsonParts.append(classNameJson) - } - - let commandJsonString = "{\(jsonParts.joined(separator: ","))}" - - return commandJsonString - } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.2] diff --git a/fastlane/swift/RubyCommandable.swift b/fastlane/swift/RubyCommandable.swift deleted file mode 100644 index 5f574da62..000000000 --- a/fastlane/swift/RubyCommandable.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// RubyCommandable.swift -// FastlaneRunner -// -// Created by Joshua Liebowitz on 1/4/18. -// - -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Foundation - -enum CommandType { - case action - case control - - var token: String { - switch self { - case .action: - return "action" - case .control: - return "control" - } - } -} - -protocol RubyCommandable { - var type: CommandType { get } - var commandJson: String { get } - var id: String { get } -} - -extension RubyCommandable { - var json: String { - return """ - { "commandType": "\(type.token)", "command": \(commandJson) } - """ - } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.2] diff --git a/fastlane/swift/Runner.swift b/fastlane/swift/Runner.swift deleted file mode 100644 index 13e19e90b..000000000 --- a/fastlane/swift/Runner.swift +++ /dev/null @@ -1,279 +0,0 @@ -// -// Runner.swift -// FastlaneSwiftRunner -// -// Created by Joshua Liebowitz on 8/26/17. -// - -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Foundation - -let logger: Logger = { - Logger() -}() - -let runner: Runner = { - Runner() -}() - -func desc(_: String) { - // no-op, this is handled in fastlane/lane_list.rb -} - -class Runner { - private var thread: Thread! - private var socketClient: SocketClient! - private let dispatchGroup: DispatchGroup = DispatchGroup() - private var returnValue: String? // lol, so safe - private var currentlyExecutingCommand: RubyCommandable? - private var shouldLeaveDispatchGroupDuringDisconnect = false - private var executeNext: [String: Bool] = [:] - - func executeCommand(_ command: RubyCommandable) -> String { - dispatchGroup.enter() - currentlyExecutingCommand = command - socketClient.send(rubyCommand: command) - - let secondsToWait = DispatchTimeInterval.seconds(SocketClient.defaultCommandTimeoutSeconds) - // swiftlint:disable next - let timeoutResult = waitWithPolling(self.executeNext[command.id], toEventually: { $0 == true }, timeout: SocketClient.defaultCommandTimeoutSeconds) - executeNext.removeValue(forKey: command.id) - let failureMessage = "command didn't execute in: \(SocketClient.defaultCommandTimeoutSeconds) seconds" - let success = testDispatchTimeoutResult(timeoutResult, failureMessage: failureMessage, timeToWait: secondsToWait) - guard success else { - log(message: "command timeout") - preconditionFailure() - } - - if let _returnValue = returnValue { - return _returnValue - } else { - return "" - } - } - - private func waitWithPolling(_ expression: @autoclosure @escaping () throws -> T, toEventually predicate: @escaping (T) -> Bool, timeout: Int, pollingInterval: DispatchTimeInterval = .milliseconds(4)) -> DispatchTimeoutResult { - func memoizedClosure(_ closure: @escaping () throws -> T) -> (Bool) throws -> T { - var cache: T? - return { withoutCaching in - if withoutCaching || cache == nil { - cache = try closure() - } - guard let cache = cache else { - preconditionFailure() - } - - return cache - } - } - - let runLoop = RunLoop.current - let timeoutDate = Date(timeInterval: TimeInterval(timeout), since: Date()) - var fulfilled: Bool = false - let _expression = memoizedClosure(expression) - repeat { - do { - let exp = try _expression(true) - fulfilled = predicate(exp) - } catch { - fatalError("Error raised \(error.localizedDescription)") - } - if !fulfilled { - runLoop.run(until: Date(timeIntervalSinceNow: pollingInterval.timeInterval)) - } else { - break - } - } while Date().compare(timeoutDate) == .orderedAscending - - if fulfilled { - return .success - } else { - return .timedOut - } - } -} - -// Handle threading stuff -extension Runner { - func startSocketThread(port: UInt32) { - let secondsToWait = DispatchTimeInterval.seconds(SocketClient.connectTimeoutSeconds) - - dispatchGroup.enter() - - socketClient = SocketClient(port: port, commandTimeoutSeconds: timeout, socketDelegate: self) - thread = Thread(target: self, selector: #selector(startSocketComs), object: nil) - guard let thread = thread else { - preconditionFailure("Thread did not instantiate correctly") - } - - thread.name = "socket thread" - thread.start() - - let connectTimeout = DispatchTime.now() + secondsToWait - let timeoutResult = dispatchGroup.wait(timeout: connectTimeout) - - let failureMessage = "couldn't start socket thread in: \(SocketClient.connectTimeoutSeconds) seconds" - let success = testDispatchTimeoutResult(timeoutResult, failureMessage: failureMessage, timeToWait: secondsToWait) - guard success else { - log(message: "socket thread timeout") - preconditionFailure() - } - } - - func disconnectFromFastlaneProcess() { - shouldLeaveDispatchGroupDuringDisconnect = true - dispatchGroup.enter() - socketClient.sendComplete() - - let connectTimeout = DispatchTime.now() + 2 - _ = dispatchGroup.wait(timeout: connectTimeout) - } - - @objc func startSocketComs() { - guard let socketClient = self.socketClient else { - return - } - - socketClient.connectAndOpenStreams() - dispatchGroup.leave() - } - - fileprivate func testDispatchTimeoutResult(_ timeoutResult: DispatchTimeoutResult, failureMessage: String, timeToWait _: DispatchTimeInterval) -> Bool { - switch timeoutResult { - case .success: - return true - case .timedOut: - log(message: "timeout: \(failureMessage)") - return false - } - } -} - -extension Runner: SocketClientDelegateProtocol { - func commandExecuted(serverResponse: SocketClientResponse, completion: (SocketClient) -> Void) { - switch serverResponse { - case let .success(returnedObject, closureArgumentValue): - verbose(message: "command executed") - returnValue = returnedObject - if let command = currentlyExecutingCommand as? RubyCommand { - if let closureArgumentValue = closureArgumentValue, !closureArgumentValue.isEmpty { - command.performCallback(callbackArg: closureArgumentValue, socket: socketClient) { - self.executeNext[command.id] = true - } - } else { - executeNext[command.id] = true - } - } - dispatchGroup.leave() - completion(socketClient) - case .clientInitiatedCancelAcknowledged: - verbose(message: "server acknowledged a cancel request") - dispatchGroup.leave() - if let command = currentlyExecutingCommand as? RubyCommand { - executeNext[command.id] = true - } - completion(socketClient) - case .alreadyClosedSockets, .connectionFailure, .malformedRequest, .malformedResponse, .serverError: - log(message: "error encountered while executing command:\n\(serverResponse)") - dispatchGroup.leave() - if let command = currentlyExecutingCommand as? RubyCommand { - executeNext[command.id] = true - } - completion(socketClient) - case let .commandTimeout(timeout): - log(message: "Runner timed out after \(timeout) second(s)") - } - } - - func connectionsOpened() { - DispatchQueue.main.async { - verbose(message: "connected!") - } - } - - func connectionsClosed() { - DispatchQueue.main.async { - if let thread = self.thread { - thread.cancel() - } - self.thread = nil - self.socketClient.closeSession() - self.socketClient = nil - verbose(message: "connection closed!") - if self.shouldLeaveDispatchGroupDuringDisconnect { - self.dispatchGroup.leave() - } - exit(0) - } - } -} - -class Logger { - enum LogMode { - init(logMode: String) { - switch logMode { - case "normal", "default": - self = .normal - case "verbose": - self = .verbose - default: - logger.log(message: "unrecognized log mode: \(logMode), defaulting to 'normal'") - self = .normal - } - } - - case normal - case verbose - } - - public static var logMode: LogMode = .normal - - func log(message: String) { - let timestamp = NSDate().timeIntervalSince1970 - print("[\(timestamp)]: \(message)") - } - - func verbose(message: String) { - if Logger.logMode == .verbose { - let timestamp = NSDate().timeIntervalSince1970 - print("[\(timestamp)]: \(message)") - } - } -} - -func log(message: String) { - logger.log(message: message) -} - -func verbose(message: String) { - logger.verbose(message: message) -} - -private extension DispatchTimeInterval { - var timeInterval: TimeInterval { - var result: TimeInterval = 0 - switch self { - case let .seconds(value): - result = TimeInterval(value) - case let .milliseconds(value): - result = TimeInterval(value) * 0.001 - case let .microseconds(value): - result = TimeInterval(value) * 0.000_001 - case let .nanoseconds(value): - result = TimeInterval(value) * 0.000_000_001 - case .never: - fatalError() - } - return result - } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.2] diff --git a/fastlane/swift/RunnerArgument.swift b/fastlane/swift/RunnerArgument.swift deleted file mode 100644 index 8d67bf92d..000000000 --- a/fastlane/swift/RunnerArgument.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// RunnerArgument.swift -// FastlaneSwiftRunner -// -// Created by Joshua Liebowitz on 9/1/17. -// - -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Foundation - -struct RunnerArgument { - let name: String - let value: String -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.2] diff --git a/fastlane/swift/Scanfile.swift b/fastlane/swift/Scanfile.swift deleted file mode 100644 index c7b38cb8e..000000000 --- a/fastlane/swift/Scanfile.swift +++ /dev/null @@ -1,21 +0,0 @@ -// This class is automatically included in FastlaneRunner during build - -// This autogenerated file will be overwritten or replaced during build time, or when you initialize `scan` -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -class Scanfile: ScanfileProtocol { -// If you want to enable `scan`, run `fastlane scan init` -// After, this file will be replaced with a custom implementation that contains values you supplied -// during the `init` process, and you won't see this message -} - - - - - -// Generated with fastlane 2.135.2 diff --git a/fastlane/swift/ScanfileProtocol.swift b/fastlane/swift/ScanfileProtocol.swift deleted file mode 100644 index 01ab19256..000000000 --- a/fastlane/swift/ScanfileProtocol.swift +++ /dev/null @@ -1,260 +0,0 @@ -protocol ScanfileProtocol: class { - /// Path to the workspace file - var workspace: String? { get } - - /// Path to the project file - var project: String? { get } - - /// The project's scheme. Make sure it's marked as `Shared` - var scheme: String? { get } - - /// The name of the simulator type you want to run tests on (e.g. 'iPhone 6') - var device: String? { get } - - /// Array of devices to run the tests on (e.g. ['iPhone 6', 'iPad Air']) - var devices: [String]? { get } - - /// Should skip auto detecting of devices if none were specified - var skipDetectDevices: Bool { get } - - /// Enabling this option will automatically killall Simulator processes before the run - var forceQuitSimulator: Bool { get } - - /// Enabling this option will automatically erase the simulator before running the application - var resetSimulator: Bool { get } - - /// Enabling this option will disable the simulator from showing the 'Slide to type' prompt - var disableSlideToType: Bool { get } - - /// Enabling this option will launch the first simulator prior to calling any xcodebuild command - var prelaunchSimulator: Bool? { get } - - /// Enabling this option will automatically uninstall the application before running it - var reinstallApp: Bool { get } - - /// The bundle identifier of the app to uninstall (only needed when enabling reinstall_app) - var appIdentifier: String? { get } - - /// Array of strings matching Test Bundle/Test Suite/Test Cases to run - var onlyTesting: String? { get } - - /// Array of strings matching Test Bundle/Test Suite/Test Cases to skip - var skipTesting: String? { get } - - /// The testplan associated with the scheme that should be used for testing - var testplan: String? { get } - - /// Array of strings matching test plan configurations to run - var onlyTestConfigurations: String? { get } - - /// Array of strings matching test plan configurations to skip - var skipTestConfigurations: String? { get } - - /// Run tests using the provided `.xctestrun` file - var xctestrun: String? { get } - - /// The toolchain that should be used for building the application (e.g. `com.apple.dt.toolchain.Swift_2_3, org.swift.30p620160816a`) - var toolchain: String? { get } - - /// Should the project be cleaned before building it? - var clean: Bool { get } - - /// Should code coverage be generated? (Xcode 7 and up) - var codeCoverage: Bool? { get } - - /// Should the address sanitizer be turned on? - var addressSanitizer: Bool? { get } - - /// Should the thread sanitizer be turned on? - var threadSanitizer: Bool? { get } - - /// Should the HTML report be opened when tests are completed? - var openReport: Bool { get } - - /// Disable xcpretty formatting of build, similar to `output_style='raw'` but this will also skip the test results table - var disableXcpretty: Bool? { get } - - /// The directory in which all reports will be stored - var outputDirectory: String { get } - - /// Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty during xcodebuild) - var outputStyle: String? { get } - - /// Comma separated list of the output types (e.g. html, junit, json-compilation-database) - var outputTypes: String { get } - - /// Comma separated list of the output files, corresponding to the types provided by :output_types (order should match). If specifying an output type of json-compilation-database with :use_clang_report_name enabled, that option will take precedence - var outputFiles: String? { get } - - /// The directory where to store the raw log - var buildlogPath: String { get } - - /// If the logs generated by the app (e.g. using NSLog, perror, etc.) in the Simulator should be written to the output_directory - var includeSimulatorLogs: Bool { get } - - /// Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path - var suppressXcodeOutput: Bool? { get } - - /// A custom xcpretty formatter to use - var formatter: String? { get } - - /// Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf') - var xcprettyArgs: String? { get } - - /// The directory where build products and other derived data will go - var derivedDataPath: String? { get } - - /// Should zip the derived data build products and place in output path? - var shouldZipBuildProducts: Bool { get } - - /// Should an Xcode result bundle be generated in the output directory - var resultBundle: Bool { get } - - /// Generate the json compilation database with clang naming convention (compile_commands.json) - var useClangReportName: Bool { get } - - /// Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count - var concurrentWorkers: Int? { get } - - /// Constrain the number of simulator devices on which to test concurrently. Equivalent to -maximum-concurrent-test-simulator-destinations - var maxConcurrentSimulators: Int? { get } - - /// Do not run test bundles in parallel on the specified destinations. Testing will occur on each destination serially. Equivalent to -disable-concurrent-testing - var disableConcurrentTesting: Bool { get } - - /// Should debug build be skipped before test build? - var skipBuild: Bool { get } - - /// Test without building, requires a derived data path - var testWithoutBuilding: Bool? { get } - - /// Build for testing only, does not run tests - var buildForTesting: Bool? { get } - - /// The SDK that should be used for building the application - var sdk: String? { get } - - /// The configuration to use when building the app. Defaults to 'Release' - var configuration: String? { get } - - /// Pass additional arguments to xcodebuild. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - var xcargs: String? { get } - - /// Use an extra XCCONFIG file to build your app - var xcconfig: String? { get } - - /// App name to use in slack message and logfile name - var appName: String? { get } - - /// Target version of the app being build or tested. Used to filter out simulator version - var deploymentTargetVersion: String? { get } - - /// Create an Incoming WebHook for your Slack group to post results there - var slackUrl: String? { get } - - /// #channel or @username - var slackChannel: String? { get } - - /// The message included with each message posted to slack - var slackMessage: String? { get } - - /// Use webhook's default username and icon settings? (true/false) - var slackUseWebhookConfiguredUsernameAndIcon: Bool { get } - - /// Overrides the webhook's username property if slack_use_webhook_configured_username_and_icon is false - var slackUsername: String { get } - - /// Overrides the webhook's image property if slack_use_webhook_configured_username_and_icon is false - var slackIconUrl: String { get } - - /// Don't publish to slack, even when an URL is given - var skipSlack: Bool { get } - - /// Only post on Slack if the tests fail - var slackOnlyOnFailure: Bool { get } - - /// Use only if you're a pro, use the other options instead - var destination: String? { get } - - /// **DEPRECATED!** Use `--output_files` instead - Sets custom full report file name when generating a single report - var customReportFileName: String? { get } - - /// Allows for override of the default `xcodebuild` command - var xcodebuildCommand: String { get } - - /// Sets a custom path for Swift Package Manager dependencies - var clonedSourcePackagesPath: String? { get } - - /// Should this step stop the build if the tests fail? Set this to false if you're using trainer - var failBuild: Bool { get } -} - -extension ScanfileProtocol { - var workspace: String? { return nil } - var project: String? { return nil } - var scheme: String? { return nil } - var device: String? { return nil } - var devices: [String]? { return nil } - var skipDetectDevices: Bool { return false } - var forceQuitSimulator: Bool { return false } - var resetSimulator: Bool { return false } - var disableSlideToType: Bool { return true } - var prelaunchSimulator: Bool? { return nil } - var reinstallApp: Bool { return false } - var appIdentifier: String? { return nil } - var onlyTesting: String? { return nil } - var skipTesting: String? { return nil } - var testplan: String? { return nil } - var onlyTestConfigurations: String? { return nil } - var skipTestConfigurations: String? { return nil } - var xctestrun: String? { return nil } - var toolchain: String? { return nil } - var clean: Bool { return false } - var codeCoverage: Bool? { return nil } - var addressSanitizer: Bool? { return nil } - var threadSanitizer: Bool? { return nil } - var openReport: Bool { return false } - var disableXcpretty: Bool? { return nil } - var outputDirectory: String { return "./test_output" } - var outputStyle: String? { return nil } - var outputTypes: String { return "html,junit" } - var outputFiles: String? { return nil } - var buildlogPath: String { return "~/Library/Logs/scan" } - var includeSimulatorLogs: Bool { return false } - var suppressXcodeOutput: Bool? { return nil } - var formatter: String? { return nil } - var xcprettyArgs: String? { return nil } - var derivedDataPath: String? { return nil } - var shouldZipBuildProducts: Bool { return false } - var resultBundle: Bool { return false } - var useClangReportName: Bool { return false } - var concurrentWorkers: Int? { return nil } - var maxConcurrentSimulators: Int? { return nil } - var disableConcurrentTesting: Bool { return false } - var skipBuild: Bool { return false } - var testWithoutBuilding: Bool? { return nil } - var buildForTesting: Bool? { return nil } - var sdk: String? { return nil } - var configuration: String? { return nil } - var xcargs: String? { return nil } - var xcconfig: String? { return nil } - var appName: String? { return nil } - var deploymentTargetVersion: String? { return nil } - var slackUrl: String? { return nil } - var slackChannel: String? { return nil } - var slackMessage: String? { return nil } - var slackUseWebhookConfiguredUsernameAndIcon: Bool { return false } - var slackUsername: String { return "fastlane" } - var slackIconUrl: String { return "https://fastlane.tools/assets/img/fastlane_icon.png" } - var skipSlack: Bool { return false } - var slackOnlyOnFailure: Bool { return false } - var destination: String? { return nil } - var customReportFileName: String? { return nil } - var xcodebuildCommand: String { return "env NSUnbufferedIO=YES xcodebuild" } - var clonedSourcePackagesPath: String? { return nil } - var failBuild: Bool { return true } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.33] diff --git a/fastlane/swift/Screengrabfile.swift b/fastlane/swift/Screengrabfile.swift deleted file mode 100644 index 6e70652bc..000000000 --- a/fastlane/swift/Screengrabfile.swift +++ /dev/null @@ -1,21 +0,0 @@ -// This class is automatically included in FastlaneRunner during build - -// This autogenerated file will be overwritten or replaced during build time, or when you initialize `screengrab` -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -class Screengrabfile: ScreengrabfileProtocol { -// If you want to enable `screengrab`, run `fastlane screengrab init` -// After, this file will be replaced with a custom implementation that contains values you supplied -// during the `init` process, and you won't see this message -} - - - - - -// Generated with fastlane 2.135.2 diff --git a/fastlane/swift/ScreengrabfileProtocol.swift b/fastlane/swift/ScreengrabfileProtocol.swift deleted file mode 100644 index e97e8095f..000000000 --- a/fastlane/swift/ScreengrabfileProtocol.swift +++ /dev/null @@ -1,96 +0,0 @@ -protocol ScreengrabfileProtocol: class { - /// Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx - var androidHome: String? { get } - - /// The Android build tools version to use, e.g. '23.0.2' - var buildToolsVersion: String? { get } - - /// A list of locales which should be used - var locales: [String] { get } - - /// Enabling this option will automatically clear previously generated screenshots before running screengrab - var clearPreviousScreenshots: Bool { get } - - /// The directory where to store the screenshots - var outputDirectory: String { get } - - /// Don't open the summary after running _screengrab_ - var skipOpenSummary: Bool { get } - - /// The package name of the app under test (e.g. com.yourcompany.yourapp) - var appPackageName: String { get } - - /// The package name of the tests bundle (e.g. com.yourcompany.yourapp.test) - var testsPackageName: String? { get } - - /// Only run tests in these Java packages - var useTestsInPackages: [String]? { get } - - /// Only run tests in these Java classes - var useTestsInClasses: [String]? { get } - - /// Additional launch arguments - var launchArguments: [String]? { get } - - /// The fully qualified class name of your test instrumentation runner - var testInstrumentationRunner: String { get } - - /// Return the device to this locale after running tests - var endingLocale: String { get } - - /// Restarts the adb daemon using `adb root` to allow access to screenshots directories on device. Use if getting 'Permission denied' errors - var useAdbRoot: Bool { get } - - /// The path to the APK for the app under test - var appApkPath: String? { get } - - /// The path to the APK for the the tests bundle - var testsApkPath: String? { get } - - /// Use the device or emulator with the given serial number or qualifier - var specificDevice: String? { get } - - /// Type of device used for screenshots. Matches Google Play Types (phone, sevenInch, tenInch, tv, wear) - var deviceType: String { get } - - /// Whether or not to exit Screengrab on test failure. Exiting on failure will not copy sceenshots to local machine nor open sceenshots summary - var exitOnTestFailure: Bool { get } - - /// Enabling this option will automatically uninstall the application before running it - var reinstallApp: Bool { get } - - /// Add timestamp suffix to screenshot filename - var useTimestampSuffix: Bool { get } - - /// Configure the host used by adb to connect, allows running on remote devices farm - var adbHost: String? { get } -} - -extension ScreengrabfileProtocol { - var androidHome: String? { return nil } - var buildToolsVersion: String? { return nil } - var locales: [String] { return ["en-US"] } - var clearPreviousScreenshots: Bool { return false } - var outputDirectory: String { return "fastlane/metadata/android" } - var skipOpenSummary: Bool { return false } - var appPackageName: String { return "" } - var testsPackageName: String? { return nil } - var useTestsInPackages: [String]? { return nil } - var useTestsInClasses: [String]? { return nil } - var launchArguments: [String]? { return nil } - var testInstrumentationRunner: String { return "androidx.test.runner.AndroidJUnitRunner" } - var endingLocale: String { return "en-US" } - var useAdbRoot: Bool { return false } - var appApkPath: String? { return nil } - var testsApkPath: String? { return nil } - var specificDevice: String? { return nil } - var deviceType: String { return "phone" } - var exitOnTestFailure: Bool { return true } - var reinstallApp: Bool { return false } - var useTimestampSuffix: Bool { return true } - var adbHost: String? { return nil } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.23] diff --git a/fastlane/swift/Snapshotfile.swift b/fastlane/swift/Snapshotfile.swift deleted file mode 100644 index 10adc0199..000000000 --- a/fastlane/swift/Snapshotfile.swift +++ /dev/null @@ -1,21 +0,0 @@ -// This class is automatically included in FastlaneRunner during build - -// This autogenerated file will be overwritten or replaced during build time, or when you initialize `snapshot` -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -class Snapshotfile: SnapshotfileProtocol { -// If you want to enable `snapshot`, run `fastlane snapshot init` -// After, this file will be replaced with a custom implementation that contains values you supplied -// during the `init` process, and you won't see this message -} - - - - - -// Generated with fastlane 2.135.2 diff --git a/fastlane/swift/SnapshotfileProtocol.swift b/fastlane/swift/SnapshotfileProtocol.swift deleted file mode 100644 index f22d541ab..000000000 --- a/fastlane/swift/SnapshotfileProtocol.swift +++ /dev/null @@ -1,176 +0,0 @@ -protocol SnapshotfileProtocol: class { - /// Path the workspace file - var workspace: String? { get } - - /// Path the project file - var project: String? { get } - - /// Pass additional arguments to xcodebuild for the test phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++" - var xcargs: String? { get } - - /// Use an extra XCCONFIG file to build your app - var xcconfig: String? { get } - - /// A list of devices you want to take the screenshots from - var devices: [String]? { get } - - /// A list of languages which should be used - var languages: [String] { get } - - /// A list of launch arguments which should be used - var launchArguments: [String] { get } - - /// The directory where to store the screenshots - var outputDirectory: String { get } - - /// If the logs generated by the app (e.g. using NSLog, perror, etc.) in the Simulator should be written to the output_directory - var outputSimulatorLogs: Bool { get } - - /// By default, the latest version should be used automatically. If you want to change it, do it here - var iosVersion: String? { get } - - /// Don't open the HTML summary after running _snapshot_ - var skipOpenSummary: Bool { get } - - /// Do not check for most recent SnapshotHelper code - var skipHelperVersionCheck: Bool { get } - - /// Enabling this option will automatically clear previously generated screenshots before running snapshot - var clearPreviousScreenshots: Bool { get } - - /// Enabling this option will automatically uninstall the application before running it - var reinstallApp: Bool { get } - - /// Enabling this option will automatically erase the simulator before running the application - var eraseSimulator: Bool { get } - - /// Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception - var overrideStatusBar: Bool { get } - - /// Enabling this option will configure the Simulator's system language - var localizeSimulator: Bool { get } - - /// Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark) - var darkMode: Bool? { get } - - /// The bundle identifier of the app to uninstall (only needed when enabling reinstall_app) - var appIdentifier: String? { get } - - /// A list of photos that should be added to the simulator before running the application - var addPhotos: [String]? { get } - - /// A list of videos that should be added to the simulator before running the application - var addVideos: [String]? { get } - - /// A path to screenshots.html template - var htmlTemplate: String? { get } - - /// The directory where to store the build log - var buildlogPath: String { get } - - /// Should the project be cleaned before building it? - var clean: Bool { get } - - /// Test without building, requires a derived data path - var testWithoutBuilding: Bool? { get } - - /// The configuration to use when building the app. Defaults to 'Release' - var configuration: String? { get } - - /// Additional xcpretty arguments - var xcprettyArgs: String? { get } - - /// The SDK that should be used for building the application - var sdk: String? { get } - - /// The scheme you want to use, this must be the scheme for the UI Tests - var scheme: String? { get } - - /// The number of times a test can fail before snapshot should stop retrying - var numberOfRetries: Int { get } - - /// Should snapshot stop immediately after the tests completely failed on one device? - var stopAfterFirstError: Bool { get } - - /// The directory where build products and other derived data will go - var derivedDataPath: String? { get } - - /// Should an Xcode result bundle be generated in the output directory - var resultBundle: Bool { get } - - /// The name of the target you want to test (if you desire to override the Target Application from Xcode) - var testTargetName: String? { get } - - /// Separate the log files per device and per language - var namespaceLogFiles: String? { get } - - /// Take snapshots on multiple simulators concurrently. Note: This option is only applicable when running against Xcode 9 - var concurrentSimulators: Bool { get } - - /// Disable the simulator from showing the 'Slide to type' prompt - var disableSlideToType: Bool { get } - - /// Sets a custom path for Swift Package Manager dependencies - var clonedSourcePackagesPath: String? { get } - - /// The testplan associated with the scheme that should be used for testing - var testplan: String? { get } - - /// Array of strings matching Test Bundle/Test Suite/Test Cases to run - var onlyTesting: String? { get } - - /// Array of strings matching Test Bundle/Test Suite/Test Cases to skip - var skipTesting: String? { get } - - /// Disable xcpretty formatting of build - var disableXcpretty: Bool? { get } -} - -extension SnapshotfileProtocol { - var workspace: String? { return nil } - var project: String? { return nil } - var xcargs: String? { return nil } - var xcconfig: String? { return nil } - var devices: [String]? { return nil } - var languages: [String] { return ["en-US"] } - var launchArguments: [String] { return [""] } - var outputDirectory: String { return "screenshots" } - var outputSimulatorLogs: Bool { return false } - var iosVersion: String? { return nil } - var skipOpenSummary: Bool { return false } - var skipHelperVersionCheck: Bool { return false } - var clearPreviousScreenshots: Bool { return false } - var reinstallApp: Bool { return false } - var eraseSimulator: Bool { return false } - var overrideStatusBar: Bool { return false } - var localizeSimulator: Bool { return false } - var darkMode: Bool? { return nil } - var appIdentifier: String? { return nil } - var addPhotos: [String]? { return nil } - var addVideos: [String]? { return nil } - var htmlTemplate: String? { return nil } - var buildlogPath: String { return "~/Library/Logs/snapshot" } - var clean: Bool { return false } - var testWithoutBuilding: Bool? { return nil } - var configuration: String? { return nil } - var xcprettyArgs: String? { return nil } - var sdk: String? { return nil } - var scheme: String? { return nil } - var numberOfRetries: Int { return 1 } - var stopAfterFirstError: Bool { return false } - var derivedDataPath: String? { return nil } - var resultBundle: Bool { return false } - var testTargetName: String? { return nil } - var namespaceLogFiles: String? { return nil } - var concurrentSimulators: Bool { return true } - var disableSlideToType: Bool { return false } - var clonedSourcePackagesPath: String? { return nil } - var testplan: String? { return nil } - var onlyTesting: String? { return nil } - var skipTesting: String? { return nil } - var disableXcpretty: Bool? { return nil } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.17] diff --git a/fastlane/swift/SocketClient.swift b/fastlane/swift/SocketClient.swift deleted file mode 100644 index f727efba3..000000000 --- a/fastlane/swift/SocketClient.swift +++ /dev/null @@ -1,331 +0,0 @@ -// -// SocketClient.swift -// FastlaneSwiftRunner -// -// Created by Joshua Liebowitz on 7/30/17. -// - -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Dispatch -import Foundation - -public enum SocketClientResponse: Error { - case alreadyClosedSockets - case malformedRequest - case malformedResponse - case serverError - case clientInitiatedCancelAcknowledged - case commandTimeout(seconds: Int) - case connectionFailure - case success(returnedObject: String?, closureArgumentValue: String?) -} - -class SocketClient: NSObject { - enum SocketStatus { - case ready - case closed - } - - static let connectTimeoutSeconds = 2 - static let defaultCommandTimeoutSeconds = 10_800 // 3 hours - static let doneToken = "done" // TODO: remove these - static let cancelToken = "cancelFastlaneRun" - - fileprivate var inputStream: InputStream! - fileprivate var outputStream: OutputStream! - fileprivate var cleaningUpAfterDone = false - fileprivate let dispatchGroup: DispatchGroup = DispatchGroup() - fileprivate let readSemaphore = DispatchSemaphore(value: 1) - fileprivate let writeSemaphore = DispatchSemaphore(value: 1) - fileprivate let commandTimeoutSeconds: Int - - private let writeQueue: DispatchQueue - private let readQueue: DispatchQueue - private let streamQueue: DispatchQueue - private let host: String - private let port: UInt32 - - let maxReadLength = 65536 // max for ipc on 10.12 is kern.ipc.maxsockbuf: 8388608 ($sysctl kern.ipc.maxsockbuf) - - private(set) weak var socketDelegate: SocketClientDelegateProtocol? - - public private(set) var socketStatus: SocketStatus - - // localhost only, this prevents other computers from connecting - init(host: String = "localhost", port: UInt32 = 2000, commandTimeoutSeconds: Int = defaultCommandTimeoutSeconds, socketDelegate: SocketClientDelegateProtocol) { - self.host = host - self.port = port - self.commandTimeoutSeconds = commandTimeoutSeconds - readQueue = DispatchQueue(label: "readQueue", qos: .background, attributes: .concurrent) - writeQueue = DispatchQueue(label: "writeQueue", qos: .background, attributes: .concurrent) - streamQueue = DispatchQueue.global(qos: .background) - socketStatus = .closed - self.socketDelegate = socketDelegate - super.init() - } - - func connectAndOpenStreams() { - var readStream: Unmanaged? - var writeStream: Unmanaged? - - streamQueue.sync { - CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, self.host as CFString, self.port, &readStream, &writeStream) - - self.inputStream = readStream!.takeRetainedValue() - self.outputStream = writeStream!.takeRetainedValue() - - self.inputStream.delegate = self - self.outputStream.delegate = self - - self.inputStream.schedule(in: .main, forMode: .defaultRunLoopMode) - self.outputStream.schedule(in: .main, forMode: .defaultRunLoopMode) - } - - dispatchGroup.enter() - readQueue.sync { - self.inputStream.open() - } - - dispatchGroup.enter() - writeQueue.sync { - self.outputStream.open() - } - - let secondsToWait = DispatchTimeInterval.seconds(SocketClient.connectTimeoutSeconds) - let connectTimeout = DispatchTime.now() + secondsToWait - - let timeoutResult = dispatchGroup.wait(timeout: connectTimeout) - let failureMessage = "Couldn't connect to ruby process within: \(SocketClient.connectTimeoutSeconds) seconds" - - let success = testDispatchTimeoutResult(timeoutResult, failureMessage: failureMessage, timeToWait: secondsToWait) - - guard success else { - socketDelegate?.commandExecuted(serverResponse: .connectionFailure) { _ in } - return - } - - socketStatus = .ready - socketDelegate?.connectionsOpened() - } - - public func send(rubyCommand: RubyCommandable) { - verbose(message: "sending: \(rubyCommand.json)") - send(string: rubyCommand.json) - writeSemaphore.signal() - } - - public func sendComplete() { - closeSession(sendAbort: true) - } - - private func testDispatchTimeoutResult(_ timeoutResult: DispatchTimeoutResult, failureMessage: String, timeToWait: DispatchTimeInterval) -> Bool { - switch timeoutResult { - case .success: - return true - case .timedOut: - log(message: "Timeout: \(failureMessage)") - - if case let .seconds(seconds) = timeToWait { - socketDelegate?.commandExecuted(serverResponse: .commandTimeout(seconds: seconds)) { _ in } - } - return false - } - } - - private func stopInputSession() { - inputStream.close() - } - - private func stopOutputSession() { - outputStream.close() - } - - private func sendThroughQueue(string: String) { - let data = string.data(using: .utf8)! - _ = data.withUnsafeBytes { self.outputStream.write($0, maxLength: data.count) } - } - - private func privateSend(string: String) { - writeQueue.sync { - writeSemaphore.wait() - self.sendThroughQueue(string: string) - writeSemaphore.signal() - let timeoutSeconds = self.cleaningUpAfterDone ? 1 : self.commandTimeoutSeconds - let timeToWait = DispatchTimeInterval.seconds(timeoutSeconds) - let commandTimeout = DispatchTime.now() + timeToWait - let timeoutResult = writeSemaphore.wait(timeout: commandTimeout) - - _ = self.testDispatchTimeoutResult(timeoutResult, failureMessage: "Ruby process didn't return after: \(SocketClient.connectTimeoutSeconds) seconds", timeToWait: timeToWait) - } - } - - private func send(string: String) { - guard !cleaningUpAfterDone else { - // This will happen after we abort if there are commands waiting to be executed - // Need to check state of SocketClient in command runner to make sure we can accept `send` - socketDelegate?.commandExecuted(serverResponse: .alreadyClosedSockets) { _ in } - return - } - - if string == SocketClient.doneToken { - cleaningUpAfterDone = true - } - - privateSend(string: string) - } - - func closeSession(sendAbort: Bool = true) { - socketStatus = .closed - - stopInputSession() - - if sendAbort { - send(rubyCommand: ControlCommand(commandType: .done)) - } - - stopOutputSession() - socketDelegate?.connectionsClosed() - } - - public func enter() { - dispatchGroup.enter() - } - - public func leave() { - readSemaphore.signal() - writeSemaphore.signal() - } -} - -extension SocketClient: StreamDelegate { - func stream(_ aStream: Stream, handle eventCode: Stream.Event) { - guard !cleaningUpAfterDone else { - // Still getting response from server eventhough we are done. - // No big deal, we're closing the streams anyway. - // That being said, we need to balance out the dispatchGroups - dispatchGroup.leave() - return - } - - if aStream === inputStream { - switch eventCode { - case Stream.Event.openCompleted: - dispatchGroup.leave() - - case Stream.Event.errorOccurred: - verbose(message: "input stream error occurred") - closeSession(sendAbort: true) - - case Stream.Event.hasBytesAvailable: - read() - - case Stream.Event.endEncountered: - // nothing special here - break - - case Stream.Event.hasSpaceAvailable: - // we don't care about this - break - - default: - verbose(message: "input stream caused unrecognized event: \(eventCode)") - } - - } else if aStream === outputStream { - switch eventCode { - case Stream.Event.openCompleted: - dispatchGroup.leave() - - case Stream.Event.errorOccurred: - // probably safe to close all the things because Ruby already disconnected - verbose(message: "output stream recevied error") - - case Stream.Event.endEncountered: - // nothing special here - break - - case Stream.Event.hasSpaceAvailable: - // we don't care about this - break - - default: - verbose(message: "output stream caused unrecognized event: \(eventCode)") - } - } - } - - func read() { - readQueue.sync { - self.readSemaphore.wait() - var buffer = [UInt8](repeating: 0, count: maxReadLength) - var output = "" - while self.inputStream!.hasBytesAvailable { - let bytesRead: Int = inputStream!.read(&buffer, maxLength: buffer.count) - if bytesRead >= 0 { - guard let read = String(bytes: buffer[.. Void) -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.2] diff --git a/fastlane/swift/SocketResponse.swift b/fastlane/swift/SocketResponse.swift deleted file mode 100644 index 092397845..000000000 --- a/fastlane/swift/SocketResponse.swift +++ /dev/null @@ -1,86 +0,0 @@ -// -// SocketResponse.swift -// FastlaneSwiftRunner -// -// Created by Joshua Liebowitz on 7/30/17. -// - -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Foundation - -struct SocketResponse { - enum ResponseType { - case parseFailure(failureInformation: [String]) - case failure(failureInformation: [String]) - case readyForNext(returnedObject: String?, closureArgumentValue: String?) - case clientInitiatedCancel - - init(statusDictionary: [String: Any]) { - guard let status = statusDictionary["status"] as? String else { - self = .parseFailure(failureInformation: ["Message failed to parse from Ruby server"]) - return - } - - if status == "ready_for_next" { - verbose(message: "ready for next") - let returnedObject = statusDictionary["return_object"] as? String - let closureArgumentValue = statusDictionary["closure_argument_value"] as? String - self = .readyForNext(returnedObject: returnedObject, closureArgumentValue: closureArgumentValue) - return - - } else if status == "cancelled" { - self = .clientInitiatedCancel - return - - } else if status == "failure" { - guard let failureInformation = statusDictionary["failure_information"] as? [String] else { - self = .parseFailure(failureInformation: ["Ruby server indicated failure but Swift couldn't receive it"]) - return - } - - self = .failure(failureInformation: failureInformation) - return - } - self = .parseFailure(failureInformation: ["Message status: \(status) not a supported status"]) - } - } - - let responseType: ResponseType - - init(payload: String) { - guard let data = SocketResponse.convertToDictionary(text: payload) else { - responseType = .parseFailure(failureInformation: ["Unable to parse message from Ruby server"]) - return - } - - guard case let statusDictionary? = data["payload"] as? [String: Any] else { - responseType = .parseFailure(failureInformation: ["Payload missing from Ruby server response"]) - return - } - - responseType = ResponseType(statusDictionary: statusDictionary) - } -} - -extension SocketResponse { - static func convertToDictionary(text: String) -> [String: Any]? { - if let data = text.data(using: .utf8) { - do { - return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] - } catch { - log(message: error.localizedDescription) - } - } - return nil - } -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.2] diff --git a/fastlane/swift/main.swift b/fastlane/swift/main.swift deleted file mode 100644 index 0cbdf42db..000000000 --- a/fastlane/swift/main.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// main.swift -// FastlaneSwiftRunner -// -// Created by Joshua Liebowitz on 8/26/17. -// - -// -// ** NOTE ** -// This file is provided by fastlane and WILL be overwritten in future updates -// If you want to add extra functionality to this project, create a new file in a -// new group so that it won't be marked for upgrade -// - -import Foundation - -let argumentProcessor = ArgumentProcessor(args: CommandLine.arguments) -let timeout = argumentProcessor.commandTimeout - -class MainProcess { - var doneRunningLane = false - var thread: Thread! - - @objc func connectToFastlaneAndRunLane() { - runner.startSocketThread(port: argumentProcessor.port) - - let completedRun = Fastfile.runLane(named: argumentProcessor.currentLane, parameters: argumentProcessor.laneParameters()) - if completedRun { - runner.disconnectFromFastlaneProcess() - } - - doneRunningLane = true - } - - func startFastlaneThread() { - thread = Thread(target: self, selector: #selector(connectToFastlaneAndRunLane), object: nil) - thread.name = "worker thread" - thread.start() - } -} - -let process: MainProcess = MainProcess() -process.startFastlaneThread() - -while !process.doneRunningLane, RunLoop.current.run(mode: RunLoopMode.defaultRunLoopMode, before: Date(timeIntervalSinceNow: 2)) { - // no op -} - -// Please don't remove the lines below -// They are used to detect outdated files -// FastlaneRunnerAPIVersion [0.9.2] diff --git a/fastlane/swift/upgrade_manifest.json b/fastlane/swift/upgrade_manifest.json deleted file mode 100644 index ef88c3aa0..000000000 --- a/fastlane/swift/upgrade_manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"Actions.swift":"Autogenerated API","Fastlane.swift":"Autogenerated API","DeliverfileProtocol.swift":"Autogenerated API","GymfileProtocol.swift":"Autogenerated API","MatchfileProtocol.swift":"Autogenerated API","Plugins.swift":"Autogenerated API","PrecheckfileProtocol.swift":"Autogenerated API","ScanfileProtocol.swift":"Autogenerated API","ScreengrabfileProtocol.swift":"Autogenerated API","SnapshotfileProtocol.swift":"Autogenerated API","LaneFileProtocol.swift":"Fastfile Components","ControlCommand.swift":"Networking","RubyCommand.swift":"Networking","RubyCommandable.swift":"Networking","Runner.swift":"Networking","SocketClient.swift":"Networking","SocketClientDelegateProtocol.swift":"Networking","SocketResponse.swift":"Networking","ArgumentProcessor.swift":"Runner Code","main.swift":"Runner Code","RunnerArgument.swift":"Runner Code"} \ No newline at end of file From fef28a2fd8b20bc6ed4a140d9773768c692b6f56 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 11 Nov 2021 07:29:06 -0800 Subject: [PATCH 017/178] update submodule LoopKit to point to loopnlearn repo, same commit ID --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 95a1ac484..7f83f0583 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,7 +4,7 @@ branch = freeaps [submodule "LoopKit"] path = LoopKit - url = https://github.com/LoopKit/LoopKit.git + url = https://github.com/loopnlearn/LoopKit.git [submodule "CGMBLEKit"] path = CGMBLEKit url = https://github.com/LoopKit/CGMBLEKit.git From 6461e5fd103f13f14d920787fdb080b099b5b89f Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 14 Nov 2021 12:54:25 -0800 Subject: [PATCH 018/178] update submodule rileylink_ios: restore inadvertent change, OmnipodPumpManager.storyboard --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index b4f5636af..fb0fe31fb 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit b4f5636af9fb5701e0aefb0cfe9618de52e28d77 +Subproject commit fb0fe31fbfcd1083bde2d0e772a66746c11ed464 From 8cec6f0e6a4e45754931dcd29ee593e04cf857d5 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 14 Nov 2021 13:34:50 -0800 Subject: [PATCH 019/178] update submodule Loop: FreeAPS v2.2 (204 dev) --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index aef0c0125..c35201fbf 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit aef0c01259d4422f223e50ac1e8216135c7ec74d +Subproject commit c35201fbf3c05d9728698a9d59a470b1ba1d5e4d From 8c296e75533b50724bcfc9353c1b12ff2d781691 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 14 Nov 2021 13:38:54 -0800 Subject: [PATCH 020/178] update submodule Loop: use appIcon --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index c35201fbf..79d79cae6 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit c35201fbf3c05d9728698a9d59a470b1ba1d5e4d +Subproject commit 79d79cae6a177a203e721ec5da6b60e838080c7e From 3ad76d765cd0ca7396f91f6921c6f5cdd6c53776 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 14 Nov 2021 14:05:56 -0800 Subject: [PATCH 021/178] update submodule Loop: remove inconsistent version --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 79d79cae6..8437ed8f9 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 79d79cae6a177a203e721ec5da6b60e838080c7e +Subproject commit 8437ed8f9506f15d88e14fb6020af0503ac76838 From b8433d13a9a8206556458b118c51558121d0e282 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 14 Nov 2021 15:39:46 -0800 Subject: [PATCH 022/178] update submodule Loop: reduce build errors --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 8437ed8f9..6e98e53ad 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 8437ed8f9506f15d88e14fb6020af0503ac76838 +Subproject commit 6e98e53adc476d2c4da0a69bf09cd91388ac72e7 From 4ca8b8533841125a224f8ed602e693893d0b9268 Mon Sep 17 00:00:00 2001 From: bjornoleh <63544115+bjornoleh@users.noreply.github.com> Date: Mon, 15 Nov 2021 20:01:34 +0100 Subject: [PATCH 023/178] Update .gitmodules (#12) fix indentation in line 36 --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 7f83f0583..67972a4e8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -33,4 +33,4 @@ [submodule "xdrip-client-swift"] path = xdrip-client-swift url = https://github.com/alekst1d/xdrip-client-swift - branch = master + branch = master From 28e4eb3f3f20155d470a1c31a1f19eea24ead530 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 15 Nov 2021 11:09:13 -0800 Subject: [PATCH 024/178] update submodule Loop: reduce watch to 2 decimal points, 0.05 min increment --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 6e98e53ad..084862390 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 6e98e53adc476d2c4da0a69bf09cd91388ac72e7 +Subproject commit 0848623903f0ad8bbf1c62e1e64ccb626c1d8eaa From ae9ce5923c827371ff0b4aa5108eddf324890524 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 15 Nov 2021 16:11:36 -0800 Subject: [PATCH 025/178] update submodule Loop: localizations --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 084862390..2378be38d 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 0848623903f0ad8bbf1c62e1e64ccb626c1d8eaa +Subproject commit 2378be38d7b762811cab9c1b9e0ca516ce35a200 From 38fe0cd801f3a221c8418c83fee1467a14266279 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 15 Nov 2021 16:13:44 -0800 Subject: [PATCH 026/178] update submodule LoopKit: localizations --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index 3a67f4ac7..13baabb01 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 3a67f4ac7a1f2484f8527304eb14f21e30f6ca95 +Subproject commit 13baabb0127d71c5b7d49417dcfed77814762d30 From 2b95714f102a8b96695980fa56ff4af9330a7cf1 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 15 Nov 2021 16:15:57 -0800 Subject: [PATCH 027/178] update submodule rileylink_ios: localizations --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index fb0fe31fb..516ec047b 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit fb0fe31fbfcd1083bde2d0e772a66746c11ed464 +Subproject commit 516ec047b0fcde1247f190218dd971bf409d1b85 From b832b7fa051720c7151e13741cc4ed8b89e0ab16 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 16 Nov 2021 06:43:54 -0800 Subject: [PATCH 028/178] update submodule rileylink_ios: localizations --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 516ec047b..aed6a585c 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 516ec047b0fcde1247f190218dd971bf409d1b85 +Subproject commit aed6a585ccb294f28b96809c0cf39a0abf1fd3cb From 2041f8db85a49093295ab39cd1ffadc13c5b9986 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 16 Nov 2021 21:08:37 -0800 Subject: [PATCH 029/178] update submodule Loop: merge id_bolus_source --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 2378be38d..e776e72bb 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 2378be38d7b762811cab9c1b9e0ca516ce35a200 +Subproject commit e776e72bbd50d33f296ea3492aef5933bf7e0d95 From c4b6f1e904ff66613382f5884e29068e89bc8865 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 16 Nov 2021 21:10:23 -0800 Subject: [PATCH 030/178] update submodule LoopKit: merge id_bolus_source --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index 13baabb01..8e5211597 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 13baabb0127d71c5b7d49417dcfed77814762d30 +Subproject commit 8e521159795c4a5d75b344aa6ce3b00b6a43dbd8 From 7f9ab4e196ff50ea92faf84c4268638b3394fe4d Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 16 Nov 2021 21:11:52 -0800 Subject: [PATCH 031/178] update submodule rileylink_ios: merge id_bolus_source --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index aed6a585c..8c3108bcc 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit aed6a585ccb294f28b96809c0cf39a0abf1fd3cb +Subproject commit 8c3108bcc04fe5c20e960bf5a45d6d161ea9ea8b From 557e589c9b399d409b5a3c1dfb103231ec781db0 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 16 Nov 2021 22:14:23 -0800 Subject: [PATCH 032/178] update submodule Loop: add build to report, (204-dev) --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index e776e72bb..d9dd7d15f 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit e776e72bbd50d33f296ea3492aef5933bf7e0d95 +Subproject commit d9dd7d15f7926f70531714a7f65e105d0fb37b8a From 4b5e76760720eefb27be94a26a88ed9aa3bd4481 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 17 Nov 2021 10:11:45 -0800 Subject: [PATCH 033/178] update submodule Loop: Localizations: Turkish --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index d9dd7d15f..829ada2c1 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit d9dd7d15f7926f70531714a7f65e105d0fb37b8a +Subproject commit 829ada2c11c93f4c4ba6d2f9142c4a6992246d71 From 0570a17708945b31e624ac33cdd3b60aea1daf6a Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 17 Nov 2021 10:12:22 -0800 Subject: [PATCH 034/178] update submodule LoopKit: Localizations: Turkish --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index 8e5211597..2a5cdb7c9 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 8e521159795c4a5d75b344aa6ce3b00b6a43dbd8 +Subproject commit 2a5cdb7c9fe429aa5cf239ff2fd3fd3c6b56b5cd From b60848e22dc4c7b5198838ed8054f0d91f93ea79 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 17 Nov 2021 10:13:02 -0800 Subject: [PATCH 035/178] update submodule rileylink_ios: Localizations: Turkish --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 8c3108bcc..1c0f83a37 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 8c3108bcc04fe5c20e960bf5a45d6d161ea9ea8b +Subproject commit 1c0f83a370e98e5dd5b6b5946fa6017034d54fe5 From b7db49d191ece5deb90a07439b68232a91741753 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 17 Nov 2021 10:17:54 -0800 Subject: [PATCH 036/178] update submodule Loop: modify CFBundleVersion in plist: number only --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 829ada2c1..1fab2230e 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 829ada2c11c93f4c4ba6d2f9142c4a6992246d71 +Subproject commit 1fab2230e3732c841b5389316d62d9cc0e4b986c From e1fe7d5a148da6d83fdea88f9641d6bf580f9dab Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 18 Nov 2021 05:15:51 -0800 Subject: [PATCH 037/178] remove fastlane: one more file --- Gemfile | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 Gemfile diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 7a118b49b..000000000 --- a/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source "https://rubygems.org" - -gem "fastlane" From e19604fc06eb023ce8b14ab36c7b210faf7b8281 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 18 Nov 2021 06:52:08 -0800 Subject: [PATCH 038/178] update submodule Loop: icons --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 1fab2230e..21a727f16 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 1fab2230e3732c841b5389316d62d9cc0e4b986c +Subproject commit 21a727f16ee940ede23946cabee386f1bc05b795 From 79d91bacd84b909b020c4bcb8be99d2cc17daa45 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 18 Nov 2021 08:12:17 -0800 Subject: [PATCH 039/178] update submodule Loop: report LoopWorkspace git branch for workspace build --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 21a727f16..664adb894 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 21a727f16ee940ede23946cabee386f1bc05b795 +Subproject commit 664adb89473f6721760a560d96c83fd99c4cc0ba From 979af57b6723476e0d1e43e86eb34384be054d20 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 18 Nov 2021 09:47:56 -0800 Subject: [PATCH 040/178] update README with link to crowdin project --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index a82394e6e..8ea384da6 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,16 @@ There are so many people who rely on the FreeAPS fork of Loop that it has been forked again to the loopnlearn github site. There are no guarantees as to how long this support can be maintained, but the loopnlearn team will do their best and are willing to accept pull requests. +With the advent of maintenance by loopnlearn, the [FreeAPS crowdin])https://crowdin.com/project/freeaps-settings) has been expanded to cover more strings. + Ivan - the originator of the FreeAPS project (ivalkou github site) has frozen his repository. All the forces of Ivan's team are aimed at developing a new project FreeAPS X based on OpenAPS. # LoopWorkspace - Build Using Script To simplify building FreeAPS, the loopnlearn team developed a script. It works for Loop and for FreeAPS and is documented in two places. (LoopDocs has more details and graphics - both sites have the same information.) +You can use the copy buttons below on this page to access the same script if you choose. + **If you have not already ensured your macOS and Xcode versions are consistent with your iPhone iOS, please use these links and follow the instructions.** * Loop and Learn website: [Build Select Script](https://www.loopandlearn.org/build-select/) From 075eac59de3b29c8cfca3789514ef52e2f3f29a5 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 18 Nov 2021 09:58:13 -0800 Subject: [PATCH 041/178] Fix typo in link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ea384da6..7b8c79548 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ There are so many people who rely on the FreeAPS fork of Loop that it has been forked again to the loopnlearn github site. There are no guarantees as to how long this support can be maintained, but the loopnlearn team will do their best and are willing to accept pull requests. -With the advent of maintenance by loopnlearn, the [FreeAPS crowdin])https://crowdin.com/project/freeaps-settings) has been expanded to cover more strings. +With the advent of maintenance by loopnlearn, the [FreeAPS crowdin](https://crowdin.com/project/freeaps-settings) has been expanded to cover more strings. Ivan - the originator of the FreeAPS project (ivalkou github site) has frozen his repository. All the forces of Ivan's team are aimed at developing a new project FreeAPS X based on OpenAPS. From e6877199dcd25a98feacc8aff56bca869d7f7a9b Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 18 Nov 2021 21:02:24 -0800 Subject: [PATCH 042/178] update submodule Loop: report LoopWorkspace SHA-1 --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 664adb894..a224b258e 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 664adb89473f6721760a560d96c83fd99c4cc0ba +Subproject commit a224b258e64b5405c1a5b00dd042072f9225c58a From 4c53948ed1c6f111a33631e8d7d4c02476d00e3e Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 19 Nov 2021 06:59:34 -0800 Subject: [PATCH 043/178] update submodule Loop: localizations --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index a224b258e..9c19d5c0a 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit a224b258e64b5405c1a5b00dd042072f9225c58a +Subproject commit 9c19d5c0aaac0a87c7e98b94a66598b664df43db From 1ca2c5052b28d4d827c17f2cd89d1e5bbe2772ae Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 19 Nov 2021 07:02:41 -0800 Subject: [PATCH 044/178] update submodule LoopKit: localizations --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index 2a5cdb7c9..deadc3a79 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 2a5cdb7c9fe429aa5cf239ff2fd3fd3c6b56b5cd +Subproject commit deadc3a792acd41691d45b19bb82cf1783185fd4 From 02f792d925b60181a183d2bb263f745223b6ecab Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 19 Nov 2021 07:05:15 -0800 Subject: [PATCH 045/178] update submodule rileylink_ios: localizations --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 1c0f83a37..63922aaee 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 1c0f83a370e98e5dd5b6b5946fa6017034d54fe5 +Subproject commit 63922aaee79fb3abe69f16c709105dbd54b0fbe3 From c1c2c777d24269eb25ab4b3742dc5eca04d8423e Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 19 Nov 2021 18:46:22 -0800 Subject: [PATCH 046/178] update submodule rileylink_ios: suspend alarm clear, manual bolus --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 63922aaee..e6ccf266b 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 63922aaee79fb3abe69f16c709105dbd54b0fbe3 +Subproject commit e6ccf266bc96ce5b2617e6891f8b9e7af506372c From 75aa9bbcd41cc30070ad53d4485d6d6148cc8584 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 19 Nov 2021 18:59:36 -0800 Subject: [PATCH 047/178] update submodule Loop: improve report details --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 9c19d5c0a..fa4106694 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 9c19d5c0aaac0a87c7e98b94a66598b664df43db +Subproject commit fa410669429cda724c1f6494b64341c37c6d3c20 From a4bf5bd0eab0727afbeb6e6b3b763a4e8e030611 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 20 Nov 2021 06:28:57 -0800 Subject: [PATCH 048/178] update submodule rileylink_ios: localizations --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index e6ccf266b..30eff02aa 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit e6ccf266bc96ce5b2617e6891f8b9e7af506372c +Subproject commit 30eff02aaeebabf0174082e25ece259af668d0de From 3902381fe3d2a26eaaef5158daed0504706fc7e3 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 20 Nov 2021 06:29:51 -0800 Subject: [PATCH 049/178] update submodule LoopKit: localizations --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index deadc3a79..57e0f8055 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit deadc3a792acd41691d45b19bb82cf1783185fd4 +Subproject commit 57e0f805519956b819a61c817a6c36469555bd68 From 7517a7e6e8d61b337dfe434a6ba7d2cca996054d Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 20 Nov 2021 06:31:00 -0800 Subject: [PATCH 050/178] update submodule Loop: localizations --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index fa4106694..e346998a2 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit fa410669429cda724c1f6494b64341c37c6d3c20 +Subproject commit e346998a278887014567fb2d087c649d0825530c From 653d4c5d9c2e2c27faa4576f31de8d3ee4d6a374 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 20 Nov 2021 10:04:37 -0800 Subject: [PATCH 051/178] update submodule Loop: increment build number after release --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index e346998a2..1b0a9ba3e 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit e346998a278887014567fb2d087c649d0825530c +Subproject commit 1b0a9ba3ebf476b8a7d337d127764fbec50c15b9 From 0c69d50224b84412aefb1e7c82aa5f162eb2445e Mon Sep 17 00:00:00 2001 From: loopnlearn <73316756+loopnlearn@users.noreply.github.com> Date: Sat, 20 Nov 2021 14:23:14 -0500 Subject: [PATCH 052/178] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 38 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..dd84ea782 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..bbcbbe7d6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From d4cb878716055da044ceb8ad982b55c1bb80bc2e Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 22 Nov 2021 17:40:45 -0800 Subject: [PATCH 053/178] update submodule rileylink_ios: add 95% option to battery level notification --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 30eff02aa..38e244237 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 30eff02aaeebabf0174082e25ece259af668d0de +Subproject commit 38e244237e9bdc1a8b94e7fb2494e23c7d2783ac From 428681c3f824c37ec596c8de79b4078227d3f41f Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 24 Nov 2021 11:58:09 -0800 Subject: [PATCH 054/178] update submodule Loop: new watch sizes --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 1b0a9ba3e..4888e4301 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 1b0a9ba3ebf476b8a7d337d127764fbec50c15b9 +Subproject commit 4888e43019f1dbd1c11f0e92fe4a2188f63a355f From b179d5f1c540fd4bc2cbf133bae686ea68d6395c Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 25 Nov 2021 05:35:32 -0800 Subject: [PATCH 055/178] update submodule Loop: improve 41mm watch display --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 4888e4301..62e44abff 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 4888e43019f1dbd1c11f0e92fe4a2188f63a355f +Subproject commit 62e44abff621ea4166222c9e8bcc8b9a9a10970a From 6bc054721e0fd166873bf733f41a09c55a5bdf8e Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 26 Nov 2021 06:25:09 -0800 Subject: [PATCH 056/178] update submodule Loop: add Slovak, update Localizations --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 62e44abff..b56ac6d6a 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 62e44abff621ea4166222c9e8bcc8b9a9a10970a +Subproject commit b56ac6d6a5b05d99959e90a10a0146f3740fe1b1 From 3a155773871a5bff40a8fffbfd46c357045aa4cd Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 26 Nov 2021 06:26:30 -0800 Subject: [PATCH 057/178] update submodule LoopKit: add Slovak, update Localizations --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index 57e0f8055..55f04d5ba 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 57e0f805519956b819a61c817a6c36469555bd68 +Subproject commit 55f04d5ba99bec708035d381ea1d5ad69f5f5f9a From 3320242b7841fe02ee330ba2a3c7f4e7f9a02769 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 26 Nov 2021 06:30:10 -0800 Subject: [PATCH 058/178] update submodule rileylink_ios: add Slovak, update Localizations --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 38e244237..4a1cd3587 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 38e244237e9bdc1a8b94e7fb2494e23c7d2783ac +Subproject commit 4a1cd35878c92a308ef4f749d4a18e2b397c9470 From 655c9e39ad42890d152f75ddb6fb792130a821ba Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 29 Nov 2021 16:29:34 -0800 Subject: [PATCH 059/178] update submodule Loop: watch format in progress --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index b56ac6d6a..066edb883 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit b56ac6d6a5b05d99959e90a10a0146f3740fe1b1 +Subproject commit 066edb8830ddaae3b3152b9961bee1dee0123162 From 542ad660d0f139e36c58c75a040aa41779e3f290 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 2 Dec 2021 06:05:39 -0800 Subject: [PATCH 060/178] update submodule Loop: improve watch/phone carb sync (issue 14) --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 066edb883..140264d3b 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 066edb8830ddaae3b3152b9961bee1dee0123162 +Subproject commit 140264d3b60cb8c490ffc34461a087bc4227a945 From c4ea07642bc18ad203d83d937e60e2924061ea62 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 4 Dec 2021 12:20:28 -0400 Subject: [PATCH 061/178] submodule dexcom-share-client-swift: no change but point to loopnlearn --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 67972a4e8..b35940b1f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,7 +13,7 @@ url = https://github.com/i-schuetz/SwiftCharts.git [submodule "dexcom-share-client-swift"] path = dexcom-share-client-swift - url = https://github.com/LoopKit/dexcom-share-client-swift.git + url = https://github.com/loopnlearn/dexcom-share-client-swift.git [submodule "G4ShareSpy"] path = G4ShareSpy url = https://github.com/LoopKit/G4ShareSpy.git From 9bb55898ca9ac7e5e1e11658a273012c6d52dfe1 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 4 Dec 2021 12:21:21 -0400 Subject: [PATCH 062/178] submodule xdrip-client-swift: no change but point to loopnlearn --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index b35940b1f..1f04b029c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -32,5 +32,5 @@ url = https://github.com/ivalkou/NightscoutAPIClient.git [submodule "xdrip-client-swift"] path = xdrip-client-swift - url = https://github.com/alekst1d/xdrip-client-swift + url = https://github.com/loopnlearn/xdrip-client-swift branch = master From 902f811dd0292b86fae494155f1b5c4fd04a3bb1 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 4 Dec 2021 21:11:49 -0800 Subject: [PATCH 063/178] update submodule Loop: indicate FreeAPS issues to be filed at loopnlearn LoopWorkspace --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 140264d3b..308e74447 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 140264d3b60cb8c490ffc34461a087bc4227a945 +Subproject commit 308e74447d7a0faeb5d19768d804271156b40b0c From 3ba3e24853b4733438f2e92e117c461dd7a613a7 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 5 Dec 2021 07:40:20 -0800 Subject: [PATCH 064/178] update submodule xdrip-client-swift: fix URL, localizations --- xdrip-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xdrip-client-swift b/xdrip-client-swift index 786b22453..cd94c26b7 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit 786b22453440a7542ffb333b8337cae2230bde7b +Subproject commit cd94c26b7fa0945078bd382d8b9c13b6d4ef5109 From a20ee06df5d046bd11e5b028313c2186abee3bb7 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 8 Dec 2021 07:50:22 -0800 Subject: [PATCH 065/178] update submodule Loop: plist modifications for TestFlight --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 308e74447..43f5bcf6b 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 308e74447d7a0faeb5d19768d804271156b40b0c +Subproject commit 43f5bcf6bc36949d81c7cad42dfd5e250402d778 From 82455b743084bc4fd2ff0e069cdf455fb3716d55 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 9 Dec 2021 14:36:39 -0800 Subject: [PATCH 066/178] submodule dexcom-share-client-swift point to loopnlearn --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 67972a4e8..b35940b1f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,7 +13,7 @@ url = https://github.com/i-schuetz/SwiftCharts.git [submodule "dexcom-share-client-swift"] path = dexcom-share-client-swift - url = https://github.com/LoopKit/dexcom-share-client-swift.git + url = https://github.com/loopnlearn/dexcom-share-client-swift.git [submodule "G4ShareSpy"] path = G4ShareSpy url = https://github.com/LoopKit/G4ShareSpy.git From ad27590c10c34d9fb5fbad83dbec0fd7a858a193 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 9 Dec 2021 14:37:41 -0800 Subject: [PATCH 067/178] update submdoule dexcome-share-client-swift: hotfix for dexcom share Trend as string --- dexcom-share-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexcom-share-client-swift b/dexcom-share-client-swift index b9acf0578..02bd768f0 160000 --- a/dexcom-share-client-swift +++ b/dexcom-share-client-swift @@ -1 +1 @@ -Subproject commit b9acf057851271aea0b5759c3062acd58ed9e8f9 +Subproject commit 02bd768f09e969f77f1f3c319b1e64020d441e4f From d110ee5a692fc5011642b92b0fb55d1385e3a4ab Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 12 Dec 2021 06:53:30 -0800 Subject: [PATCH 068/178] update submodule dexcom-share-client-swift: more elegant solution for dexcom share encode Trend as string --- dexcom-share-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexcom-share-client-swift b/dexcom-share-client-swift index 02bd768f0..945ee4b97 160000 --- a/dexcom-share-client-swift +++ b/dexcom-share-client-swift @@ -1 +1 @@ -Subproject commit 02bd768f09e969f77f1f3c319b1e64020d441e4f +Subproject commit 945ee4b9738ca2f4321155e370988303efe9823e From dea5e51a8e542430052cae52d1e4ca9004bff808 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 12 Dec 2021 09:04:36 -0800 Subject: [PATCH 069/178] update submodule dexcom-share-client-swift: freeaps hotfix Dexcom format change --- dexcom-share-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexcom-share-client-swift b/dexcom-share-client-swift index b9acf0578..945ee4b97 160000 --- a/dexcom-share-client-swift +++ b/dexcom-share-client-swift @@ -1 +1 @@ -Subproject commit b9acf057851271aea0b5759c3062acd58ed9e8f9 +Subproject commit 945ee4b9738ca2f4321155e370988303efe9823e From d4c519c326606cec366d7d62161c3badf5698352 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20B=20M=C3=A5rtensson?= <53905247+Jon-b-m@users.noreply.github.com> Date: Mon, 13 Dec 2021 01:19:26 +0100 Subject: [PATCH 070/178] Add submodule libre-direct-client-swift (#20) * Add submodule libre-direct-client-swift --- .gitmodules | 4 ++++ libre-direct-client-swift | 1 + 2 files changed, 5 insertions(+) create mode 160000 libre-direct-client-swift diff --git a/.gitmodules b/.gitmodules index 1f04b029c..cc95cd150 100644 --- a/.gitmodules +++ b/.gitmodules @@ -34,3 +34,7 @@ path = xdrip-client-swift url = https://github.com/loopnlearn/xdrip-client-swift branch = master +[submodule "libre-direct-client-swift"] + path = libre-direct-client-swift + url = https://github.com/Jon-b-m/libre-direct-client-swift.git + branch = integration diff --git a/libre-direct-client-swift b/libre-direct-client-swift new file mode 160000 index 000000000..dfd2104df --- /dev/null +++ b/libre-direct-client-swift @@ -0,0 +1 @@ +Subproject commit dfd2104dfa3523def14588ceaca0be1864798775 From 068137a27f9f1990c7c6af39aeff78bcd392d56a Mon Sep 17 00:00:00 2001 From: "Jon B.M" Date: Mon, 13 Dec 2021 10:16:24 +0100 Subject: [PATCH 071/178] Typo --- libre-direct-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libre-direct-client-swift b/libre-direct-client-swift index dfd2104df..675d6e5eb 160000 --- a/libre-direct-client-swift +++ b/libre-direct-client-swift @@ -1 +1 @@ -Subproject commit dfd2104dfa3523def14588ceaca0be1864798775 +Subproject commit 675d6e5eb5b3e2d18d5a44b571db06aad84c5816 From 60185913351060475a7dae096d38e2065a893d3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20B=20M=C3=A5rtensson?= <53905247+Jon-b-m@users.noreply.github.com> Date: Mon, 13 Dec 2021 10:17:53 +0100 Subject: [PATCH 072/178] Update submodule commit ref. (#1) Typo in submodule libre-direct-client-swift --- Loop | 2 +- xdrip-client-swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Loop b/Loop index 43f5bcf6b..7823648b7 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 43f5bcf6bc36949d81c7cad42dfd5e250402d778 +Subproject commit 7823648b708134130417faa4c361003834b5ad1d diff --git a/xdrip-client-swift b/xdrip-client-swift index cd94c26b7..c80df12ed 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit cd94c26b7fa0945078bd382d8b9c13b6d4ef5109 +Subproject commit c80df12ed294f40d3081c61e89e6274c919e0fd1 From a7aa1f703e3e7d8735735e9073f10461d881a1a5 Mon Sep 17 00:00:00 2001 From: bjornoleh Date: Mon, 13 Dec 2021 12:55:30 +0100 Subject: [PATCH 073/178] Update submodule Loop: GD integration: Watch UI, Crowdin, URL etc. --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 7823648b7..8e70f1ded 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 7823648b708134130417faa4c361003834b5ad1d +Subproject commit 8e70f1dedc68c28cfc15dadc579ed76d6b4bc321 From 4a9014c0ea61c9eb5f2b3d8592bb9b7ec11c413a Mon Sep 17 00:00:00 2001 From: bjornoleh Date: Mon, 13 Dec 2021 12:57:00 +0100 Subject: [PATCH 074/178] Add to workspace: group:libre-direct-client-swift/LibreDirectClient.xcodeproj --- Loop.xcworkspace/contents.xcworkspacedata | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Loop.xcworkspace/contents.xcworkspacedata b/Loop.xcworkspace/contents.xcworkspacedata index 4a0314fb8..a5c732ad1 100644 --- a/Loop.xcworkspace/contents.xcworkspacedata +++ b/Loop.xcworkspace/contents.xcworkspacedata @@ -34,6 +34,9 @@ + + From 538d4056cfa327be3904e2e72500b1143e415d40 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 13 Dec 2021 06:31:11 -0800 Subject: [PATCH 075/178] updated submodule xdrip-client-swift: localizations --- xdrip-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xdrip-client-swift b/xdrip-client-swift index c80df12ed..cd94c26b7 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit c80df12ed294f40d3081c61e89e6274c919e0fd1 +Subproject commit cd94c26b7fa0945078bd382d8b9c13b6d4ef5109 From 859dfbed066bddbba792ad189d297c012b66b887 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 13 Dec 2021 07:39:47 -0800 Subject: [PATCH 076/178] add LibreDirectClient to LoopWorkspace Framework --- .../xcschemes/Loop (Workspace).xcscheme | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme b/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme index 7e3cf5dc5..aec3bc11b 100644 --- a/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme +++ b/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme @@ -384,6 +384,34 @@ ReferencedContainer = "container:xdrip-client-swift/xDripClient.xcodeproj"> + + + + + + + + Date: Mon, 13 Dec 2021 08:34:38 -0800 Subject: [PATCH 077/178] update submodule Loop: no change in content, match LnL SHA-1 --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 8e70f1ded..ea58ad261 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 8e70f1dedc68c28cfc15dadc579ed76d6b4bc321 +Subproject commit ea58ad2618731d0cb1f0dc7a77d706ef3f8b37cd From 265150e7b34ec7aec1d9e3744a10b8d5cab23efa Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 13 Dec 2021 16:25:43 -0800 Subject: [PATCH 078/178] update submodule libre-direct-client-swift: updated README.md --- libre-direct-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libre-direct-client-swift b/libre-direct-client-swift index 675d6e5eb..75cbcadb0 160000 --- a/libre-direct-client-swift +++ b/libre-direct-client-swift @@ -1 +1 @@ -Subproject commit 675d6e5eb5b3e2d18d5a44b571db06aad84c5816 +Subproject commit 75cbcadb045b7ec1e010fab740bb2ef718161ed4 From e19b080096f3457b3584b8a01ee5c7d8f856cf81 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 14 Dec 2021 19:31:27 -0800 Subject: [PATCH 079/178] submodule libre-direct-client-swift: no change but point to loopnlearn --- .gitmodules | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index cc95cd150..520f28543 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,6 @@ [submodule "Loop"] path = Loop url=https://github.com/loopnlearn/Loop.git - branch = freeaps [submodule "LoopKit"] path = LoopKit url = https://github.com/loopnlearn/LoopKit.git @@ -33,8 +32,6 @@ [submodule "xdrip-client-swift"] path = xdrip-client-swift url = https://github.com/loopnlearn/xdrip-client-swift - branch = master [submodule "libre-direct-client-swift"] path = libre-direct-client-swift - url = https://github.com/Jon-b-m/libre-direct-client-swift.git - branch = integration + url = https://github.com/loopnlearn/libre-direct-client-swift.git From 3d1302e7e05b6dd90759c0b62f68b4f8950b9a0e Mon Sep 17 00:00:00 2001 From: loopnlearn <73316756+loopnlearn@users.noreply.github.com> Date: Sat, 20 Nov 2021 14:23:14 -0500 Subject: [PATCH 080/178] Update issue templates (cherry picked from commit 0c69d50224b84412aefb1e7c82aa5f162eb2445e) --- .github/ISSUE_TEMPLATE/bug_report.md | 38 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..dd84ea782 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..bbcbbe7d6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From c3d252885f76907a02c58cd536219120b29c18e8 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 27 Feb 2022 10:37:21 -0800 Subject: [PATCH 081/178] update submodule Loop: update Build Details in Loop Report --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index ea58ad261..cafa6d778 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit ea58ad2618731d0cb1f0dc7a77d706ef3f8b37cd +Subproject commit cafa6d7784e48917164c0e5446fa18d2370f6bb1 From f0768ad4c0725fff011b487d4cdc37dcdd350fde Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 27 Feb 2022 14:08:45 -0800 Subject: [PATCH 082/178] update submodule xdrip-client-swift: localizations --- xdrip-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xdrip-client-swift b/xdrip-client-swift index cd94c26b7..24082164b 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit cd94c26b7fa0945078bd382d8b9c13b6d4ef5109 +Subproject commit 24082164b8d75604523b2ea8d517dd23e1a368fb From f7fde5aa7b96b120faa996d00fb3506ba48c1078 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 27 Feb 2022 14:09:02 -0800 Subject: [PATCH 083/178] update submodule rileylink_ios: resume alert fixes, localizations --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 4a1cd3587..68a70b607 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 4a1cd35878c92a308ef4f749d4a18e2b397c9470 +Subproject commit 68a70b607419cb270b661598dedb419e6d593866 From f2811c0a5c5012a441e2c0810deb40005725eca7 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 27 Feb 2022 14:09:14 -0800 Subject: [PATCH 084/178] update submodule libre-direct-client-swift: update README.md --- libre-direct-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libre-direct-client-swift b/libre-direct-client-swift index 75cbcadb0..28e774d1b 160000 --- a/libre-direct-client-swift +++ b/libre-direct-client-swift @@ -1 +1 @@ -Subproject commit 75cbcadb045b7ec1e010fab740bb2ef718161ed4 +Subproject commit 28e774d1b82df9e11aba10cc5502949746829adf From 9a36c1731c2d0fb37b4048d0cd9fea6f74c9bd24 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 27 Feb 2022 14:09:23 -0800 Subject: [PATCH 085/178] update submodule dexcom-share-client-swift: localizations --- dexcom-share-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexcom-share-client-swift b/dexcom-share-client-swift index 945ee4b97..e3306556a 160000 --- a/dexcom-share-client-swift +++ b/dexcom-share-client-swift @@ -1 +1 @@ -Subproject commit 945ee4b9738ca2f4321155e370988303efe9823e +Subproject commit e3306556aef760553ca34a1c91fdeadfde2cdd68 From 23e31ee8186fdcb7c8ffdb08f432423242989e21 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 27 Feb 2022 14:09:32 -0800 Subject: [PATCH 086/178] update submodule LoopKit: localizations --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index 55f04d5ba..3959fea38 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 55f04d5ba99bec708035d381ea1d5ad69f5f5f9a +Subproject commit 3959fea38a5310901fc026dbde5189330bebc873 From 1c5c48b9f95c2e7a87f3fd1ae33439f57e2755cd Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 27 Feb 2022 14:09:40 -0800 Subject: [PATCH 087/178] update submodule Loop: localizations --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index cafa6d778..e9e3dcfe3 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit cafa6d7784e48917164c0e5446fa18d2370f6bb1 +Subproject commit e9e3dcfe37e1e90ddb0b4c63a20e31b5dbbc29b1 From ecd92f5d5bcff1a65727c1bc339d5647f5f4dae5 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 27 Feb 2022 16:10:15 -0800 Subject: [PATCH 088/178] update LoopWorkspace for Dash --- .gitmodules | 3 +++ Loop.xcworkspace/contents.xcworkspacedata | 3 +++ .../xcshareddata/swiftpm/Package.resolved | 16 ++++++++++++++++ .../xcschemes/Loop (Workspace).xcscheme | 14 ++++++++++++++ 4 files changed, 36 insertions(+) create mode 100644 Loop.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/.gitmodules b/.gitmodules index 520f28543..e29c986f9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -35,3 +35,6 @@ [submodule "libre-direct-client-swift"] path = libre-direct-client-swift url = https://github.com/loopnlearn/libre-direct-client-swift.git +[submodule "OmniBLE"] + path = OmniBLE + url = https://github.com/loopnlearn/OmniBLE.git diff --git a/Loop.xcworkspace/contents.xcworkspacedata b/Loop.xcworkspace/contents.xcworkspacedata index a5c732ad1..0fdf2d60f 100644 --- a/Loop.xcworkspace/contents.xcworkspacedata +++ b/Loop.xcworkspace/contents.xcworkspacedata @@ -37,6 +37,9 @@ + + diff --git a/Loop.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Loop.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000..f100b48b4 --- /dev/null +++ b/Loop.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "CryptoSwift", + "repositoryURL": "https://github.com/krzyzanowskim/CryptoSwift", + "state": { + "branch": null, + "revision": "4b0565384d3c4c588af09e660535b2c7c9bf5b39", + "version": "1.4.2" + } + } + ] + }, + "version": 1 +} diff --git a/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme b/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme index aec3bc11b..3d00a83b1 100644 --- a/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme +++ b/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme @@ -300,6 +300,20 @@ ReferencedContainer = "container:NightscoutAPIClient/NightscoutAPIClient.xcodeproj"> + + + + Date: Sun, 27 Feb 2022 16:11:12 -0800 Subject: [PATCH 089/178] update submodule Loop: add OmniBLE aka Omnipod Dash pump --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index e9e3dcfe3..47ebb0ded 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit e9e3dcfe37e1e90ddb0b4c63a20e31b5dbbc29b1 +Subproject commit 47ebb0deddfd2cc40474bf3a749baaa9cb8dd97a From 46590376e39188ec47f5b3b531b9e3511cae6ef0 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 27 Feb 2022 16:13:59 -0800 Subject: [PATCH 090/178] add submodule OmniBLE to LoopWorkspace --- OmniBLE | 1 + 1 file changed, 1 insertion(+) create mode 160000 OmniBLE diff --git a/OmniBLE b/OmniBLE new file mode 160000 index 000000000..bc35bff87 --- /dev/null +++ b/OmniBLE @@ -0,0 +1 @@ +Subproject commit bc35bff8765153d221c61c19a38e5a5c1ae09ef4 From 7d6ca39489e323ed66f7585dfca08e64585a41d6 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 28 Feb 2022 09:37:06 -0800 Subject: [PATCH 091/178] update submodule OmniBLE: more fixes to freeaps bluetooth --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index bc35bff87..b8d0cbf32 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit bc35bff8765153d221c61c19a38e5a5c1ae09ef4 +Subproject commit b8d0cbf32d86a18d25987e3e78536d22b37e8640 From 99725e403f4a3b53b30c290904c6c0afdf0a8d3e Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 3 Mar 2022 12:40:21 -0800 Subject: [PATCH 092/178] update submodule Loop: timeZone bug fix --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index e9e3dcfe3..1bcbd4e85 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit e9e3dcfe37e1e90ddb0b4c63a20e31b5dbbc29b1 +Subproject commit 1bcbd4e850d68c18787514433902852527c2ebd6 From 269efaaa8d73fda68b4b8135dbf18fdb2938046c Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 3 Mar 2022 12:41:55 -0800 Subject: [PATCH 093/178] update submodule Loop: timeZone bug fix --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 47ebb0ded..7cce7ba77 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 47ebb0deddfd2cc40474bf3a749baaa9cb8dd97a +Subproject commit 7cce7ba773f1564a478fb6420156a435c4e8b0b1 From 98753f5b2a816a8b72c585f277cccf74aefb6005 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 3 Mar 2022 13:23:02 -0800 Subject: [PATCH 094/178] update submodule Loop: timeZone bug fix --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 7cce7ba77..68b9bbebf 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 7cce7ba773f1564a478fb6420156a435c4e8b0b1 +Subproject commit 68b9bbebf3600de7629055451bbd22a23144e691 From 15b720fa842f33556e452724f3fed4649ac5a984 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 3 Mar 2022 13:28:54 -0800 Subject: [PATCH 095/178] update submodule Loop: timeZone bug fix --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 1bcbd4e85..274163715 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 1bcbd4e850d68c18787514433902852527c2ebd6 +Subproject commit 2741637158c11121fd7ce76fb3d853461dab4e77 From e8d12d974a9aa620f09518a3240644b6625a6e54 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 4 Mar 2022 06:17:09 -0800 Subject: [PATCH 096/178] update submodule Loop: fix timeZone bug --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index e346998a2..0fb69da59 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit e346998a278887014567fb2d087c649d0825530c +Subproject commit 0fb69da595cb4cb3568b599abc05c231ece1e7f2 From 90a08603ea7daeabc4a0aee1d218b553b890cf18 Mon Sep 17 00:00:00 2001 From: Marion Barker Date: Fri, 4 Mar 2022 09:08:36 -0800 Subject: [PATCH 097/178] Update README.md Add warnings that the build select script is only for released FreeAPS code. Add warnings about making sure the LoopWorkspace folder does not already exist in the folder where you are attempting a fresh manual clone. --- README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b8c79548..cf66298ae 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ Ivan - the originator of the FreeAPS project (ivalkou github site) has frozen hi # LoopWorkspace - Build Using Script +**You must do a manual build for any branch other than the released code, i.e., freeaps branch** + To simplify building FreeAPS, the loopnlearn team developed a script. It works for Loop and for FreeAPS and is documented in two places. (LoopDocs has more details and graphics - both sites have the same information.) You can use the copy buttons below on this page to access the same script if you choose. @@ -23,6 +25,8 @@ There is a copy button located by hovering on the right-hand side of the text bl First time users should run the script and answer the questions. Copy and paste in a terminal. +**This is ONLY for freeaps branch (released code)** + ``` title="Execute Utilities to Clean Profiles and Derived Data" /bin/bash -c "$(curl -fsSL https://git.io/JImiE)" ``` @@ -47,6 +51,8 @@ This starts the script and answers the questions to run the utility to give you This starts the script and answers the questions to download the FreeAPS code (LoopWorkspace branch=freeaps). +**This is ONLY for freeaps branch (released code)** + Once downloaded (in the ~/Downloads/BuildLoop folder), the script: * Opens Xcode in the correct directory * Opens browser showing a helpful graphic of build steps @@ -63,15 +69,29 @@ Once downloaded (in the ~/Downloads/BuildLoop folder), the script: This section has the manual steps if you do not choose to use the script. +**For any branch other than freeaps, you must use the Manual Build steps** + ## Clone This repository uses git submodules to pull in the various workspace dependencies. +Note - you have to be in a folder that does not already have a LoopWorkspace folder in it. +Typically, you should create a separate folder for each clone - using a descriptor and date is helpful. + +Example: +``` +cd ~/Downloads +mkdir FreeAPS__ +cd FreeAPS__ +``` +where you should modify \ and \ to something you prefer. + To clone this repo: ``` -git clone --branch=freeaps --recurse-submodules https://github.com/loopnlearn/LoopWorkspace +git clone --branch= --recurse-submodules https://github.com/loopnlearn/LoopWorkspace ``` +where you must modify \ to be the branch you want to clone, e.g., freeaps_dev. ## Open From 0b2cc133eab8f2f75652b297faf9cabc625fb9c5 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 6 Mar 2022 07:49:42 -0800 Subject: [PATCH 098/178] update submodule OmniBLE: fix Dash HUD updates --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index b8d0cbf32..0b4ae6bfd 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit b8d0cbf32d86a18d25987e3e78536d22b37e8640 +Subproject commit 0b4ae6bfd8efb30ef9e6df34de71984206a5b8a9 From 93f780dcc1e237799e0f3ae18a594fac8e46ce26 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 8 Mar 2022 06:26:27 -0800 Subject: [PATCH 099/178] update submodule Loop: ensure ISF, Correction schedule matches pump timeZone --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index d4c9d249d..90b0c8c56 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit d4c9d249db549734ca799453805664b265ec1b0e +Subproject commit 90b0c8c5620bbd1977086792677c005ea4ce7317 From 1e228f69b347328e130a2174d228e2f01a43384a Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 10 Mar 2022 13:58:04 -0800 Subject: [PATCH 100/178] updated submodule rileylink_ios: update DetailedStatus consistent OmniBLE --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 68a70b607..7d5fc827a 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 68a70b607419cb270b661598dedb419e6d593866 +Subproject commit 7d5fc827aeeaa4c1606547322d75bd8fe98b54a6 From e68dbd1db6431c4bf9665de552a49178693dbbea Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 10 Mar 2022 13:59:26 -0800 Subject: [PATCH 101/178] update submodule xdrip-client-swift: filter from field to just xDrip --- xdrip-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xdrip-client-swift b/xdrip-client-swift index 24082164b..70623a39f 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit 24082164b8d75604523b2ea8d517dd23e1a368fb +Subproject commit 70623a39fd716ba5041b981ea1c39e6f4cf37391 From 556b8760dd29c75e9f8810591a5033f305954d0b Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 10 Mar 2022 14:00:29 -0800 Subject: [PATCH 102/178] update submodule libre-direct-client-swift: filter from field to just GlucoseDirect --- libre-direct-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libre-direct-client-swift b/libre-direct-client-swift index 28e774d1b..408499fdd 160000 --- a/libre-direct-client-swift +++ b/libre-direct-client-swift @@ -1 +1 @@ -Subproject commit 28e774d1b82df9e11aba10cc5502949746829adf +Subproject commit 408499fdd677ea80aa7013205e95bc9b2edbf90c From 0b6f5fb922740a76a786162f69316892e2260e14 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 11 Mar 2022 12:04:29 -0800 Subject: [PATCH 103/178] update submodule OmniBLE: reporting updates --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index 0b4ae6bfd..6441688e1 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 0b4ae6bfd8efb30ef9e6df34de71984206a5b8a9 +Subproject commit 6441688e197d1577b4d1664ca972979e7b29112b From 7a72d952b39646025d1b7e2e17aa9b06559dae6f Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 12 Mar 2022 09:03:14 -0800 Subject: [PATCH 104/178] update submodule Loop: watch updates when phone updates --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 90b0c8c56..593c2c86a 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 90b0c8c5620bbd1977086792677c005ea4ce7317 +Subproject commit 593c2c86a82b44027e36c4df0ebc8a9299ef900f From 5f4667777bb3ce137c4fae5867e1c1699a704e49 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 12 Mar 2022 16:51:17 -0800 Subject: [PATCH 105/178] update submodule OmniBLE: update tests per dev --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index 6441688e1..41b159ab5 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 6441688e197d1577b4d1664ca972979e7b29112b +Subproject commit 41b159ab58afc75df9809196203b05273563bafd From 560f4f2174b4d441487480ccda98f2ccadc88176 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 16 Mar 2022 09:20:49 -0700 Subject: [PATCH 106/178] Xcode 13.3: update .gitmodules, submodules --- .gitmodules | 10 ++++------ Amplitude-iOS | 2 +- CGMBLEKit | 2 +- G4ShareSpy | 2 +- Loop | 2 +- LoopKit | 2 +- MKRingProgressView | 2 +- SwiftCharts | 2 +- dexcom-share-client-swift | 2 +- rileylink_ios | 2 +- xdrip-client-swift | 2 +- 11 files changed, 14 insertions(+), 16 deletions(-) diff --git a/.gitmodules b/.gitmodules index b35940b1f..32383b100 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,22 +1,21 @@ [submodule "Loop"] path = Loop url=https://github.com/loopnlearn/Loop.git - branch = freeaps [submodule "LoopKit"] path = LoopKit url = https://github.com/loopnlearn/LoopKit.git [submodule "CGMBLEKit"] path = CGMBLEKit - url = https://github.com/LoopKit/CGMBLEKit.git + url = https://github.com/loopnlearn/CGMBLEKit.git [submodule "SwiftCharts"] path = SwiftCharts - url = https://github.com/i-schuetz/SwiftCharts.git + url = https://github.com/ps2/SwiftCharts.git [submodule "dexcom-share-client-swift"] path = dexcom-share-client-swift url = https://github.com/loopnlearn/dexcom-share-client-swift.git [submodule "G4ShareSpy"] path = G4ShareSpy - url = https://github.com/LoopKit/G4ShareSpy.git + url = https://github.com/loopnlearn/G4ShareSpy.git [submodule "rileylink_ios"] path = rileylink_ios url = https://github.com/loopnlearn/rileylink_ios.git @@ -32,5 +31,4 @@ url = https://github.com/ivalkou/NightscoutAPIClient.git [submodule "xdrip-client-swift"] path = xdrip-client-swift - url = https://github.com/alekst1d/xdrip-client-swift - branch = master + url = https://github.com/loopnlearn/xdrip-client-swift diff --git a/Amplitude-iOS b/Amplitude-iOS index 2137d5fd4..3fa2d1199 160000 --- a/Amplitude-iOS +++ b/Amplitude-iOS @@ -1 +1 @@ -Subproject commit 2137d5fd44bf630ed33e1e72d7af6d8f8612f270 +Subproject commit 3fa2d1199a042067cd6c402ce5752678891a0e25 diff --git a/CGMBLEKit b/CGMBLEKit index 4fea57fb3..56df55995 160000 --- a/CGMBLEKit +++ b/CGMBLEKit @@ -1 +1 @@ -Subproject commit 4fea57fb346ab7480c9740ec813bb58acb7fa686 +Subproject commit 56df55995b9e3cb04b44aace04a9a91ed3276ac0 diff --git a/G4ShareSpy b/G4ShareSpy index c80eedb42..a2eb496e9 160000 --- a/G4ShareSpy +++ b/G4ShareSpy @@ -1 +1 @@ -Subproject commit c80eedb4260b47fdad56b1c568275f8ad1b814a5 +Subproject commit a2eb496e92ae2fbf84fea6134cddb71c3307ef10 diff --git a/Loop b/Loop index 0fb69da59..c9279bbd8 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 0fb69da595cb4cb3568b599abc05c231ece1e7f2 +Subproject commit c9279bbd812977374f1c0a4e3bc65bd736797718 diff --git a/LoopKit b/LoopKit index 57e0f8055..87c6e4fbd 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 57e0f805519956b819a61c817a6c36469555bd68 +Subproject commit 87c6e4fbdff8d42b994d660a013a1010f7b01871 diff --git a/MKRingProgressView b/MKRingProgressView index f548a5c64..816d8652c 160000 --- a/MKRingProgressView +++ b/MKRingProgressView @@ -1 +1 @@ -Subproject commit f548a5c64832be2d37d7c91b5800e284887a2a0a +Subproject commit 816d8652c5b7ca25d0622ac763373b01f845c3e7 diff --git a/SwiftCharts b/SwiftCharts index f5cee8733..e3d2a5725 160000 --- a/SwiftCharts +++ b/SwiftCharts @@ -1 +1 @@ -Subproject commit f5cee87337a50af9e41367f73436dafaaacd3f11 +Subproject commit e3d2a57252b04a1cb6e4d56fcc23d9bea0abca5e diff --git a/dexcom-share-client-swift b/dexcom-share-client-swift index 945ee4b97..fbbd99470 160000 --- a/dexcom-share-client-swift +++ b/dexcom-share-client-swift @@ -1 +1 @@ -Subproject commit 945ee4b9738ca2f4321155e370988303efe9823e +Subproject commit fbbd994708541c9dbaf31a1df34fa101ed93315e diff --git a/rileylink_ios b/rileylink_ios index 30eff02aa..9f423ea82 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 30eff02aaeebabf0174082e25ece259af668d0de +Subproject commit 9f423ea82d8b6dd2e6c626ccc1150b8f4fc158a1 diff --git a/xdrip-client-swift b/xdrip-client-swift index 786b22453..d97035c86 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit 786b22453440a7542ffb333b8337cae2230bde7b +Subproject commit d97035c860dc72a149606c2e55c7d84dd74bc923 From f17d76afd307a23195464de621fd5ad8d2815bc6 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 16 Mar 2022 12:16:37 -0700 Subject: [PATCH 107/178] Xcode 13.3: update try 2 --- .gitmodules | 3 +-- MKRingProgressView | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 32383b100..0b2539b7a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -22,10 +22,9 @@ [submodule "Amplitude-iOS"] path = Amplitude-iOS url = https://github.com/LoopKit/Amplitude-iOS.git - branch = decreepify [submodule "MKRingProgressView"] path = MKRingProgressView - url = https://github.com/LoopKit/MKRingProgressView.git + url = https://github.com/loopnlearn/MKRingProgressView.git [submodule "NightscoutAPIClient"] path = NightscoutAPIClient url = https://github.com/ivalkou/NightscoutAPIClient.git diff --git a/MKRingProgressView b/MKRingProgressView index 816d8652c..f9cb12280 160000 --- a/MKRingProgressView +++ b/MKRingProgressView @@ -1 +1 @@ -Subproject commit 816d8652c5b7ca25d0622ac763373b01f845c3e7 +Subproject commit f9cb1228053ed114bbdbf3e90ae70c4cc30d0de0 From fb725ca6d071775388d7d9d3d2be0e3f49b4e697 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 16 Mar 2022 20:47:39 -0700 Subject: [PATCH 108/178] update submodule LoopKit: Xcode 13.3 interim hack --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index 87c6e4fbd..b451b27f5 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 87c6e4fbdff8d42b994d660a013a1010f7b01871 +Subproject commit b451b27f5478ffd0980bc6687719687385c09afe From 5e87424286afa924fe8ec6fc6e505ed3415de474 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 17 Mar 2022 06:55:11 -0700 Subject: [PATCH 109/178] update submodule LoopKit: Xcode 13.3 interim hack --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index b451b27f5..3bfa9ede0 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit b451b27f5478ffd0980bc6687719687385c09afe +Subproject commit 3bfa9ede03cfd50aebdba25cf4afb3befb0adf8c From 18a77c392eaa71257d6dfdc33670dca1bfe8d63f Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 17 Mar 2022 23:01:55 -0700 Subject: [PATCH 110/178] Xcode 13.3 fix: update .gitmodules, submodules --- .gitmodules | 47 +++++++++++++++++++-------------------- Amplitude-iOS | 2 +- CGMBLEKit | 2 +- G4ShareSpy | 2 +- Loop | 2 +- LoopKit | 2 +- MKRingProgressView | 2 +- SwiftCharts | 2 +- dexcom-share-client-swift | 2 +- libre-direct-client-swift | 2 +- rileylink_ios | 2 +- xdrip-client-swift | 2 +- 12 files changed, 34 insertions(+), 35 deletions(-) diff --git a/.gitmodules b/.gitmodules index e29c986f9..1b45f498b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,40 +1,39 @@ +[submodule "Amplitude-iOS"] + path = Amplitude-iOS + url = https://github.com/loopnlearn/Amplitude-iOS.git +[submodule "CGMBLEKit"] + path = CGMBLEKit + url = https://github.com/loopnlearn/CGMBLEKit.git +[submodule "G4ShareSpy"] + path = G4ShareSpy + url = https://github.com/loopnlearn/G4ShareSpy.git [submodule "Loop"] path = Loop - url=https://github.com/loopnlearn/Loop.git + url = https://github.com/loopnlearn/Loop.git [submodule "LoopKit"] path = LoopKit url = https://github.com/loopnlearn/LoopKit.git -[submodule "CGMBLEKit"] - path = CGMBLEKit - url = https://github.com/LoopKit/CGMBLEKit.git +[submodule "MKRingProgressView"] + path = MKRingProgressView + url = https://github.com/loopnlearn/MKRingProgressView.git +[submodule "NightscoutAPIClient"] + path = NightscoutAPIClient + url = https://github.com/ivalkou/NightscoutAPIClient.git +[submodule "OmniBLE"] + path = OmniBLE + url = https://github.com/loopnlearn/OmniBLE.git [submodule "SwiftCharts"] path = SwiftCharts - url = https://github.com/i-schuetz/SwiftCharts.git + url = https://github.com/ps2/SwiftCharts.git [submodule "dexcom-share-client-swift"] path = dexcom-share-client-swift url = https://github.com/loopnlearn/dexcom-share-client-swift.git -[submodule "G4ShareSpy"] - path = G4ShareSpy - url = https://github.com/LoopKit/G4ShareSpy.git +[submodule "libre-direct-client-swift"] + path = libre-direct-client-swift + url = https://github.com/loopnlearn/libre-direct-client-swift.git [submodule "rileylink_ios"] path = rileylink_ios url = https://github.com/loopnlearn/rileylink_ios.git -[submodule "Amplitude-iOS"] - path = Amplitude-iOS - url = https://github.com/LoopKit/Amplitude-iOS.git - branch = decreepify -[submodule "MKRingProgressView"] - path = MKRingProgressView - url = https://github.com/LoopKit/MKRingProgressView.git -[submodule "NightscoutAPIClient"] - path = NightscoutAPIClient - url = https://github.com/ivalkou/NightscoutAPIClient.git [submodule "xdrip-client-swift"] path = xdrip-client-swift url = https://github.com/loopnlearn/xdrip-client-swift -[submodule "libre-direct-client-swift"] - path = libre-direct-client-swift - url = https://github.com/loopnlearn/libre-direct-client-swift.git -[submodule "OmniBLE"] - path = OmniBLE - url = https://github.com/loopnlearn/OmniBLE.git diff --git a/Amplitude-iOS b/Amplitude-iOS index 2137d5fd4..3fa2d1199 160000 --- a/Amplitude-iOS +++ b/Amplitude-iOS @@ -1 +1 @@ -Subproject commit 2137d5fd44bf630ed33e1e72d7af6d8f8612f270 +Subproject commit 3fa2d1199a042067cd6c402ce5752678891a0e25 diff --git a/CGMBLEKit b/CGMBLEKit index 4fea57fb3..56df55995 160000 --- a/CGMBLEKit +++ b/CGMBLEKit @@ -1 +1 @@ -Subproject commit 4fea57fb346ab7480c9740ec813bb58acb7fa686 +Subproject commit 56df55995b9e3cb04b44aace04a9a91ed3276ac0 diff --git a/G4ShareSpy b/G4ShareSpy index c80eedb42..a2eb496e9 160000 --- a/G4ShareSpy +++ b/G4ShareSpy @@ -1 +1 @@ -Subproject commit c80eedb4260b47fdad56b1c568275f8ad1b814a5 +Subproject commit a2eb496e92ae2fbf84fea6134cddb71c3307ef10 diff --git a/Loop b/Loop index 593c2c86a..b117872a3 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 593c2c86a82b44027e36c4df0ebc8a9299ef900f +Subproject commit b117872a3ad759edde5e1505ce68b1c995400752 diff --git a/LoopKit b/LoopKit index 3959fea38..1a1360639 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 3959fea38a5310901fc026dbde5189330bebc873 +Subproject commit 1a136063917507cc9eace43316e1d1d703b0d068 diff --git a/MKRingProgressView b/MKRingProgressView index f548a5c64..f9cb12280 160000 --- a/MKRingProgressView +++ b/MKRingProgressView @@ -1 +1 @@ -Subproject commit f548a5c64832be2d37d7c91b5800e284887a2a0a +Subproject commit f9cb1228053ed114bbdbf3e90ae70c4cc30d0de0 diff --git a/SwiftCharts b/SwiftCharts index f5cee8733..e3d2a5725 160000 --- a/SwiftCharts +++ b/SwiftCharts @@ -1 +1 @@ -Subproject commit f5cee87337a50af9e41367f73436dafaaacd3f11 +Subproject commit e3d2a57252b04a1cb6e4d56fcc23d9bea0abca5e diff --git a/dexcom-share-client-swift b/dexcom-share-client-swift index e3306556a..3efecaee2 160000 --- a/dexcom-share-client-swift +++ b/dexcom-share-client-swift @@ -1 +1 @@ -Subproject commit e3306556aef760553ca34a1c91fdeadfde2cdd68 +Subproject commit 3efecaee21e52e0d63730f247b52a630b77610db diff --git a/libre-direct-client-swift b/libre-direct-client-swift index 408499fdd..976be151b 160000 --- a/libre-direct-client-swift +++ b/libre-direct-client-swift @@ -1 +1 @@ -Subproject commit 408499fdd677ea80aa7013205e95bc9b2edbf90c +Subproject commit 976be151b255646f3071c48a4b3acc06b9564447 diff --git a/rileylink_ios b/rileylink_ios index 7d5fc827a..9bcf1ddae 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 7d5fc827aeeaa4c1606547322d75bd8fe98b54a6 +Subproject commit 9bcf1ddaea9aeea65817589692598be976df6a65 diff --git a/xdrip-client-swift b/xdrip-client-swift index 70623a39f..e9c05dbd8 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit 70623a39fd716ba5041b981ea1c39e6f4cf37391 +Subproject commit e9c05dbd882827627bca6089e8d02b779c93711a From 5d7b6a932c5f34d67d3a9fcc76c09ada02636094 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 18 Mar 2022 06:17:38 -0700 Subject: [PATCH 111/178] update .gitmodules --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 0b2539b7a..59b4abd7a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -21,7 +21,7 @@ url = https://github.com/loopnlearn/rileylink_ios.git [submodule "Amplitude-iOS"] path = Amplitude-iOS - url = https://github.com/LoopKit/Amplitude-iOS.git + url = https://github.com/loopnlearn/Amplitude-iOS.git [submodule "MKRingProgressView"] path = MKRingProgressView url = https://github.com/loopnlearn/MKRingProgressView.git From a83002549273722e829f1ef52d85f7d51e86546b Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 31 Mar 2022 10:33:45 -0700 Subject: [PATCH 112/178] update submodule OmniBLE: Reworked shared basal rate support for Dash & Eros --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index 41b159ab5..383f859b5 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 41b159ab58afc75df9809196203b05273563bafd +Subproject commit 383f859b59ad8ead7f2868955be15dd94662f81b From a567adee91078010fdd88d05eb6490d670c4a668 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 31 Mar 2022 10:34:14 -0700 Subject: [PATCH 113/178] update submodule rileylink_ios: Reworked shared basal rate support for Dash & Eros --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 9bcf1ddae..226e360c9 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 9bcf1ddaea9aeea65817589692598be976df6a65 +Subproject commit 226e360c9dea79756464fc621a12a153492e7ffc From 92c7924df753c584fdf8779eda4abacbf6c3b139 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 31 Mar 2022 12:53:56 -0700 Subject: [PATCH 114/178] update submodule Loop and scheme: enable tests --- Loop | 2 +- .../xcshareddata/xcschemes/Loop (Workspace).xcscheme | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Loop b/Loop index b117872a3..cc17c67e4 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit b117872a3ad759edde5e1505ce68b1c995400752 +Subproject commit cc17c67e4fbb5b75ec05380dc38c3cf8629fed8c diff --git a/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme b/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme index 3d00a83b1..168dbbf3d 100644 --- a/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme +++ b/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme @@ -435,7 +435,7 @@ @@ -465,7 +465,7 @@ @@ -598,7 +598,7 @@ From f549b354ccc008f1acc5ef34faff0ca4994c1d89 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 31 Mar 2022 12:55:30 -0700 Subject: [PATCH 115/178] update submodule LoopKit: update timezone tests as was done in Loop-dev --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index 1a1360639..f7d909542 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 1a136063917507cc9eace43316e1d1d703b0d068 +Subproject commit f7d90954265e171e545c429adfc0455d7d073183 From ec0c8f0d5d2c9ccf3409c6c2cf8e0b3a5cb62ab3 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 26 Mar 2022 19:48:22 -0700 Subject: [PATCH 116/178] update cryptoswift resolved --- .../xcshareddata/swiftpm/Package.resolved | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/Loop.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Loop.xcworkspace/xcshareddata/swiftpm/Package.resolved index f100b48b4..da7af97b4 100644 --- a/Loop.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Loop.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,16 +1,14 @@ { - "object": { - "pins": [ - { - "package": "CryptoSwift", - "repositoryURL": "https://github.com/krzyzanowskim/CryptoSwift", - "state": { - "branch": null, - "revision": "4b0565384d3c4c588af09e660535b2c7c9bf5b39", - "version": "1.4.2" - } + "pins" : [ + { + "identity" : "cryptoswift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/krzyzanowskim/CryptoSwift", + "state" : { + "revision" : "12f2389aca4a07e0dd54c86ec23d0721ed88b8db", + "version" : "1.4.3" } - ] - }, - "version": 1 + }, + ], + "version" : 2 } From 162634a88551f411905235b0aa01d7724a26feb0 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 26 Mar 2022 20:19:40 -0700 Subject: [PATCH 117/178] comment out some lines --- LoopConfigOverride.xcconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LoopConfigOverride.xcconfig b/LoopConfigOverride.xcconfig index 74e873eba..bae931d8f 100644 --- a/LoopConfigOverride.xcconfig +++ b/LoopConfigOverride.xcconfig @@ -6,7 +6,7 @@ // Customize this to change the app name displayed MAIN_APP_DISPLAY_NAME = FreeAPS -MAIN_APP_PRODUCT_NAME = FreeAPS +// MAIN_APP_PRODUCT_NAME = FreeAPS // Features // SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) FEATURE_OVERRIDES_DISABLED @@ -14,4 +14,4 @@ MAIN_APP_PRODUCT_NAME = FreeAPS // Assets INCLUDED_SOURCE_FILE_NAMES = AdditionalAssets.xcassets -APPICON_NAME = CustomLoopIcon +// APPICON_NAME = CustomLoopIcon From 78660449957d0e9ba020b1f47c286e8032c13727 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 31 Mar 2022 13:12:21 -0700 Subject: [PATCH 118/178] add OmniBLE tests --- .../xcshareddata/xcschemes/Loop (Workspace).xcscheme | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme b/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme index 168dbbf3d..e54232809 100644 --- a/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme +++ b/Loop.xcworkspace/xcshareddata/xcschemes/Loop (Workspace).xcscheme @@ -581,6 +581,16 @@ ReferencedContainer = "container:rileylink_ios/RileyLink.xcodeproj"> + + + + Date: Fri, 1 Apr 2022 12:41:41 -0700 Subject: [PATCH 119/178] update submodule Loop: update version to 2.3 --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index cc17c67e4..22168f26e 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit cc17c67e4fbb5b75ec05380dc38c3cf8629fed8c +Subproject commit 22168f26e73cdd5d963451a4fca0c3c0fd113c69 From 25d8d16109836e61f4a1df8c96cae25e141a3a8e Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 1 Apr 2022 17:22:20 -0700 Subject: [PATCH 120/178] Update LoopConfigOverride for signing --- LoopConfigOverride.xcconfig | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/LoopConfigOverride.xcconfig b/LoopConfigOverride.xcconfig index bae931d8f..3600a2eac 100644 --- a/LoopConfigOverride.xcconfig +++ b/LoopConfigOverride.xcconfig @@ -6,12 +6,9 @@ // Customize this to change the app name displayed MAIN_APP_DISPLAY_NAME = FreeAPS -// MAIN_APP_PRODUCT_NAME = FreeAPS - // Features -// SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) FEATURE_OVERRIDES_DISABLED +SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) ALLOW_SIMULATORS_ENABLED //ALLOW_DEBUG_FEATURES_ENABLED -// Assets -INCLUDED_SOURCE_FILE_NAMES = AdditionalAssets.xcassets +// Put your team id here for signing +// LOOP_DEVELOPMENT_TEAM = YOUR_ID_HERE -// APPICON_NAME = CustomLoopIcon From cdad2e530d3c76022739a4caf14c35c84d787ad9 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 2 Apr 2022 00:24:18 -0700 Subject: [PATCH 121/178] updated submodule Loop: new method to sign --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 22168f26e..a334f8720 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 22168f26e73cdd5d963451a4fca0c3c0fd113c69 +Subproject commit a334f8720db4972eface47825cd1ecab7f286d84 From 2635f6ca661466e7b3b962a57ceedae1d1f46212 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 3 Apr 2022 14:54:55 -0700 Subject: [PATCH 122/178] enable use of persistent override file across clones --- LoopConfigOverride.xcconfig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/LoopConfigOverride.xcconfig b/LoopConfigOverride.xcconfig index 3600a2eac..93ae3ddee 100644 --- a/LoopConfigOverride.xcconfig +++ b/LoopConfigOverride.xcconfig @@ -1,14 +1,14 @@ -// +// This enables a persistent override file used across clones at the same level +#include? "../../LoopConfigOverride.xcconfig" // Override this if you don't want the default com.${DEVELOPMENT_TEAM}.loopkit that loop uses // MAIN_APP_BUNDLE_IDENTIFIER = com.myname.loop // Customize this to change the app name displayed -MAIN_APP_DISPLAY_NAME = FreeAPS +// MAIN_APP_DISPLAY_NAME = Loop // Features SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) ALLOW_SIMULATORS_ENABLED //ALLOW_DEBUG_FEATURES_ENABLED // Put your team id here for signing // LOOP_DEVELOPMENT_TEAM = YOUR_ID_HERE - From 188b0d5422373f41bace4640c5dcef9c3fc9819d Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 3 Apr 2022 14:55:54 -0700 Subject: [PATCH 123/178] update submodule Loop: insert FreeAPS name into Loop.xcconfig --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index a334f8720..5cdedaf2b 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit a334f8720db4972eface47825cd1ecab7f286d84 +Subproject commit 5cdedaf2b436e60023e81c3e0ea1921130013941 From cfdab9d4ff3a76e435e9e74cfc7d14252f02f886 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 7 Apr 2022 13:21:57 -0700 Subject: [PATCH 124/178] update submodule Loop: partial fix for red loops with TWI Dash pod when CGM has no heartbeat --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 5cdedaf2b..711bbd15f 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 5cdedaf2b436e60023e81c3e0ea1921130013941 +Subproject commit 711bbd15f0371ee789371258321430f4cabdc9e9 From dbc0747d8dad1f540f91ed6a42d0fd8085a97bd6 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 16 Apr 2022 10:48:17 -0700 Subject: [PATCH 125/178] update submodule Loop: localization updates --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 711bbd15f..522a23493 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 711bbd15f0371ee789371258321430f4cabdc9e9 +Subproject commit 522a234938dcb43c94198f44fbad81fb15fe6445 From c66542d4ada9d2cc4b714489db4feffd0fbf2e8e Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 16 Apr 2022 10:48:33 -0700 Subject: [PATCH 126/178] update submodule LoopKit: localization updates --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index f7d909542..ed3c55d36 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit f7d90954265e171e545c429adfc0455d7d073183 +Subproject commit ed3c55d368e494a42d711fee3e1d1feeb6388c7b From cf325d65dad83ad8a8429798d959ab2aa2fb0aba Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 16 Apr 2022 10:49:03 -0700 Subject: [PATCH 127/178] update submodule rileylink_ios: localization updates --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 226e360c9..7c6bb11c9 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 226e360c9dea79756464fc621a12a153492e7ffc +Subproject commit 7c6bb11c9484ad8ef3b9607786839c60123a64bd From e84a791ad50d3c6c1063e0126178d03d8d5beb45 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 20 Apr 2022 13:19:00 -0700 Subject: [PATCH 128/178] update submodule xdrip-client-swift: localizations --- xdrip-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xdrip-client-swift b/xdrip-client-swift index e9c05dbd8..60ec4895b 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit e9c05dbd882827627bca6089e8d02b779c93711a +Subproject commit 60ec4895be7f8f21b3e522adf515e3bf8ade0b4e From 0adb08ad01c266902e4896eb03b28c29d87f0186 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 20 Apr 2022 13:36:54 -0700 Subject: [PATCH 129/178] update submodule rileylink_ios: localizations --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 7c6bb11c9..091e264e0 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 7c6bb11c9484ad8ef3b9607786839c60123a64bd +Subproject commit 091e264e04accb53fe515fdfd4020b30470672cb From ef2cbbee7a2feb578ee29dedc96f32f2f4bba14e Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 20 Apr 2022 13:48:26 -0700 Subject: [PATCH 130/178] update submodule dexcom-share-client-swift: localizations --- dexcom-share-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexcom-share-client-swift b/dexcom-share-client-swift index 3efecaee2..d5981bbbd 160000 --- a/dexcom-share-client-swift +++ b/dexcom-share-client-swift @@ -1 +1 @@ -Subproject commit 3efecaee21e52e0d63730f247b52a630b77610db +Subproject commit d5981bbbd340a646183532d0ceab30468e62ffa7 From 92475434988784bb561d3e8b4f5d284d7efc8f54 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 20 Apr 2022 14:08:42 -0700 Subject: [PATCH 131/178] update submodule LoopKit: localizations --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index ed3c55d36..a80286a3c 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit ed3c55d368e494a42d711fee3e1d1feeb6388c7b +Subproject commit a80286a3c6824220d01b9997d9c6a2a62d8e32a8 From 3094be3c91ede2f37d82540c58c292c4c1a3f98d Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 20 Apr 2022 14:23:11 -0700 Subject: [PATCH 132/178] update submodule Loop: localizations --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 522a23493..4250afc50 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 522a234938dcb43c94198f44fbad81fb15fe6445 +Subproject commit 4250afc509fbd4a70a04ebbf069b872ebdee790a From d44a7b97570ec71a641de3be8a5588a487d39464 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 21 Apr 2022 06:30:36 -0700 Subject: [PATCH 133/178] update submodule OmniBLE: localizations --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index 383f859b5..8d7174168 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 383f859b59ad8ead7f2868955be15dd94662f81b +Subproject commit 8d717416876d1308a1d4a6d9e001e4fb3236e572 From 41df7bd9a355dab7fc117ca62aa1a72a4bfc57bd Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 21 Apr 2022 13:39:54 -0700 Subject: [PATCH 134/178] update submodules for PumpManager: enactTempBasal support for manual temp basals * Loop * LoopKit * OmniBLE * rileylink_ios --- Loop | 2 +- LoopKit | 2 +- OmniBLE | 2 +- rileylink_ios | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Loop b/Loop index 4250afc50..249f13111 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 4250afc509fbd4a70a04ebbf069b872ebdee790a +Subproject commit 249f1311140b2bd1dae894b18a78ba8f2aa1ec83 diff --git a/LoopKit b/LoopKit index a80286a3c..dd494680e 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit a80286a3c6824220d01b9997d9c6a2a62d8e32a8 +Subproject commit dd494680e7a341eaa688720e5abe20043cdf94ec diff --git a/OmniBLE b/OmniBLE index 8d7174168..f836159b1 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 8d717416876d1308a1d4a6d9e001e4fb3236e572 +Subproject commit f836159b1806a969a3784582a03147aea9539838 diff --git a/rileylink_ios b/rileylink_ios index 091e264e0..cdc06af5c 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 091e264e04accb53fe515fdfd4020b30470672cb +Subproject commit cdc06af5c5477c596889f00d6f50521f9f3ed74c From 4d6ff4d90a3bcca30e82e2df70f8b5da9a944e9b Mon Sep 17 00:00:00 2001 From: Marion Barker Date: Wed, 27 Apr 2022 12:25:43 -0700 Subject: [PATCH 135/178] Update README.md Remove explicity copy commands that used a shortcut which github will stop supporting on April 29, 2022. Refer instead to the main LoopDocs and Loop and Learn documentation. --- README.md | 46 +--------------------------------------------- 1 file changed, 1 insertion(+), 45 deletions(-) diff --git a/README.md b/README.md index 7b8c79548..154019c16 100644 --- a/README.md +++ b/README.md @@ -10,55 +10,11 @@ Ivan - the originator of the FreeAPS project (ivalkou github site) has frozen hi To simplify building FreeAPS, the loopnlearn team developed a script. It works for Loop and for FreeAPS and is documented in two places. (LoopDocs has more details and graphics - both sites have the same information.) -You can use the copy buttons below on this page to access the same script if you choose. - **If you have not already ensured your macOS and Xcode versions are consistent with your iPhone iOS, please use these links and follow the instructions.** * Loop and Learn website: [Build Select Script](https://www.loopandlearn.org/build-select/) * LoopDocs website: [LoopDocs Updating](https://loopkit.github.io/loopdocs/build/updating) -There is a copy button located by hovering on the right-hand side of the text blocks below. Click on it, all the words in the block are copied into your paste buffer, and then you can paste the words into the terminal. - -## Run Script - Answer the Questions - -First time users should run the script and answer the questions. Copy and paste in a terminal. - -``` title="Execute Utilities to Clean Profiles and Derived Data" -/bin/bash -c "$(curl -fsSL https://git.io/JImiE)" -``` - -## One-Step Actions - -For experienced users who have already verified their macOS and Xcode versions, two one-step copy blocks are provided to perform the two actions required for a rebuild. Paste each set of commands into a terminal. Review output for errors - if there are errors, please use the LoopDocs link. - - -### Clean Profiles and Derived Data - -This starts the script and answers the questions to run the utility to give you a full-year of the app if you have a paid Apple Developer ID and clean out Derived Data from previous Xcode activity on your computer. - -``` title="Execute Utilities to Clean Profiles and Derived Data" -/bin/bash -c "$(curl -fsSL https://git.io/JImiE)" -1 -3 -3 -``` - -### Download FreeAPS and Open Xcode - -This starts the script and answers the questions to download the FreeAPS code (LoopWorkspace branch=freeaps). - -Once downloaded (in the ~/Downloads/BuildLoop folder), the script: -* Opens Xcode in the correct directory -* Opens browser showing a helpful graphic of build steps - -``` title="Download FreeAPS and Open Xcode" -/bin/bash -c "$(curl -fsSL https://git.io/JImiE)" -1 -1 -2 -1 -``` - # LoopWorkspace - Manual Build This section has the manual steps if you do not choose to use the script. @@ -67,7 +23,7 @@ This section has the manual steps if you do not choose to use the script. This repository uses git submodules to pull in the various workspace dependencies. -To clone this repo: +To manually clone this repo (without using the script mentioned above): ``` git clone --branch=freeaps --recurse-submodules https://github.com/loopnlearn/LoopWorkspace From 90b741b18626790ec8038683101cc6df50798805 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 27 Apr 2022 13:03:40 -0700 Subject: [PATCH 136/178] update README.md --- README.md | 68 ++----------------------------------------------------- 1 file changed, 2 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index cf66298ae..154019c16 100644 --- a/README.md +++ b/README.md @@ -8,90 +8,26 @@ Ivan - the originator of the FreeAPS project (ivalkou github site) has frozen hi # LoopWorkspace - Build Using Script -**You must do a manual build for any branch other than the released code, i.e., freeaps branch** - To simplify building FreeAPS, the loopnlearn team developed a script. It works for Loop and for FreeAPS and is documented in two places. (LoopDocs has more details and graphics - both sites have the same information.) -You can use the copy buttons below on this page to access the same script if you choose. - **If you have not already ensured your macOS and Xcode versions are consistent with your iPhone iOS, please use these links and follow the instructions.** * Loop and Learn website: [Build Select Script](https://www.loopandlearn.org/build-select/) * LoopDocs website: [LoopDocs Updating](https://loopkit.github.io/loopdocs/build/updating) -There is a copy button located by hovering on the right-hand side of the text blocks below. Click on it, all the words in the block are copied into your paste buffer, and then you can paste the words into the terminal. - -## Run Script - Answer the Questions - -First time users should run the script and answer the questions. Copy and paste in a terminal. - -**This is ONLY for freeaps branch (released code)** - -``` title="Execute Utilities to Clean Profiles and Derived Data" -/bin/bash -c "$(curl -fsSL https://git.io/JImiE)" -``` - -## One-Step Actions - -For experienced users who have already verified their macOS and Xcode versions, two one-step copy blocks are provided to perform the two actions required for a rebuild. Paste each set of commands into a terminal. Review output for errors - if there are errors, please use the LoopDocs link. - - -### Clean Profiles and Derived Data - -This starts the script and answers the questions to run the utility to give you a full-year of the app if you have a paid Apple Developer ID and clean out Derived Data from previous Xcode activity on your computer. - -``` title="Execute Utilities to Clean Profiles and Derived Data" -/bin/bash -c "$(curl -fsSL https://git.io/JImiE)" -1 -3 -3 -``` - -### Download FreeAPS and Open Xcode - -This starts the script and answers the questions to download the FreeAPS code (LoopWorkspace branch=freeaps). - -**This is ONLY for freeaps branch (released code)** - -Once downloaded (in the ~/Downloads/BuildLoop folder), the script: -* Opens Xcode in the correct directory -* Opens browser showing a helpful graphic of build steps - -``` title="Download FreeAPS and Open Xcode" -/bin/bash -c "$(curl -fsSL https://git.io/JImiE)" -1 -1 -2 -1 -``` - # LoopWorkspace - Manual Build This section has the manual steps if you do not choose to use the script. -**For any branch other than freeaps, you must use the Manual Build steps** - ## Clone This repository uses git submodules to pull in the various workspace dependencies. -Note - you have to be in a folder that does not already have a LoopWorkspace folder in it. -Typically, you should create a separate folder for each clone - using a descriptor and date is helpful. - -Example: -``` -cd ~/Downloads -mkdir FreeAPS__ -cd FreeAPS__ -``` -where you should modify \ and \ to something you prefer. - -To clone this repo: +To manually clone this repo (without using the script mentioned above): ``` -git clone --branch= --recurse-submodules https://github.com/loopnlearn/LoopWorkspace +git clone --branch=freeaps --recurse-submodules https://github.com/loopnlearn/LoopWorkspace ``` -where you must modify \ to be the branch you want to clone, e.g., freeaps_dev. ## Open From ecbf70176f0afa26c2a17b8efd8337c2fa6b4aba Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 6 May 2022 15:23:21 -0700 Subject: [PATCH 137/178] update submodule OmniBLE: Avoid redundant disconnect when already disconnected --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index f836159b1..204d8f4b2 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit f836159b1806a969a3784582a03147aea9539838 +Subproject commit 204d8f4b26808d2454ba4e662ecea378b550fac3 From d321afa4cdc8bb4888c29f53a8d79ac59fc4619d Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 21 May 2022 14:33:57 -0700 Subject: [PATCH 138/178] update submodule OmniBLE: force reconnect if idle 3 min --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index 204d8f4b2..acc4187e8 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 204d8f4b26808d2454ba4e662ecea378b550fac3 +Subproject commit acc4187e8c2c942a60fd138fc4713792aeae7a32 From 6296fdf07dbe2e2e687fd0ff3b75bc358ef4b790 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 21 May 2022 15:22:19 -0700 Subject: [PATCH 139/178] update submodules: OmniBLE, rileylink_ios: enable temp basal to be cancelled while bolus is in progress --- OmniBLE | 2 +- rileylink_ios | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OmniBLE b/OmniBLE index acc4187e8..44a339bb9 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit acc4187e8c2c942a60fd138fc4713792aeae7a32 +Subproject commit 44a339bb9c217f6864d2e5fd0e68ec35ff019d9f diff --git a/rileylink_ios b/rileylink_ios index cdc06af5c..5acb5e80b 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit cdc06af5c5477c596889f00d6f50521f9f3ed74c +Subproject commit 5acb5e80b28be5b336a58a9c143c5456c99651a4 From c1f7916666a91d054a3e374df9e00256f077a02d Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 22 May 2022 08:31:10 -0700 Subject: [PATCH 140/178] update submodule Loop: localizations --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 249f13111..2f1fc4668 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 249f1311140b2bd1dae894b18a78ba8f2aa1ec83 +Subproject commit 2f1fc46689f05465042bb246f68014ab7d1eb0f2 From a8a283e0ae31f87b0fe1583e8cd151002b1cc2df Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 22 May 2022 09:34:51 -0700 Subject: [PATCH 141/178] update submodule LoopKit: localizations --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index dd494680e..a3cd83e97 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit dd494680e7a341eaa688720e5abe20043cdf94ec +Subproject commit a3cd83e973dde63f97df1b9a3d76ac0d51521c1e From 8911ce0f7275510cc9375f167a02be46f0d8cdb1 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 22 May 2022 09:44:53 -0700 Subject: [PATCH 142/178] update submodule dexcom-share-client-swift: localizations --- dexcom-share-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexcom-share-client-swift b/dexcom-share-client-swift index d5981bbbd..767219488 160000 --- a/dexcom-share-client-swift +++ b/dexcom-share-client-swift @@ -1 +1 @@ -Subproject commit d5981bbbd340a646183532d0ceab30468e62ffa7 +Subproject commit 767219488bafdcbb191c2df52fd66d548d9e9d2b From 3a1f703cf85601bbf7ecae182417ad76ed7a5cb5 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 22 May 2022 09:50:55 -0700 Subject: [PATCH 143/178] update submodule rileylink_ios: localizations --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 5acb5e80b..4115a59fe 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 5acb5e80b28be5b336a58a9c143c5456c99651a4 +Subproject commit 4115a59fec18d2aaeb2c78aa6b32a0f3516867d8 From 049bcb9b4da0f2325b4cf3b21390101cbd7f4a8f Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 22 May 2022 09:55:20 -0700 Subject: [PATCH 144/178] update submodule xdrip-client-swift: localizations --- xdrip-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xdrip-client-swift b/xdrip-client-swift index 60ec4895b..75e247df1 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit 60ec4895be7f8f21b3e522adf515e3bf8ade0b4e +Subproject commit 75e247df18a68f0d9329dc972b43159d74fcaf8a From ba91cb07fed79a417300ce3cf7b2ab38117a4c48 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 22 May 2022 12:08:31 -0700 Subject: [PATCH 145/178] update submodule OmniBLE: localizations --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index 44a339bb9..8cb0d838b 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 44a339bb9c217f6864d2e5fd0e68ec35ff019d9f +Subproject commit 8cb0d838ba764c1541a10116469e1acbc2a49dee From 187547f4ce4f6da39e39cd190c9cad287aea4aba Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 9 Jun 2022 12:00:44 -0700 Subject: [PATCH 146/178] update submodule LoopKit: include date in Reservoir Insulin Delivery display --- LoopKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoopKit b/LoopKit index a3cd83e97..f2b614886 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit a3cd83e973dde63f97df1b9a3d76ac0d51521c1e +Subproject commit f2b614886693776b5f1cf83807d0b25984432000 From d98e174602bbe14f75a0874c935d0f8e1c335348 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 9 Jun 2022 12:42:24 -0700 Subject: [PATCH 147/178] update submodule OmniBLE: handle invalid peripheral --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index 8cb0d838b..aa7e8af82 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 8cb0d838ba764c1541a10116469e1acbc2a49dee +Subproject commit aa7e8af82e288791edd331154e074a4ca8d64f2e From 7df2e3509cf74a85555e48ddbc8dcdbf99bfac04 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 10 Jun 2022 05:48:48 -0700 Subject: [PATCH 148/178] update submodule xdrip-client-swift: enable heartbeat with xDrip4iOS --- xdrip-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xdrip-client-swift b/xdrip-client-swift index 75e247df1..4d98d54c8 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit 75e247df18a68f0d9329dc972b43159d74fcaf8a +Subproject commit 4d98d54c812db2f303b00232ffac3ac39b72248c From 90e04ac31f3a8bf416dec7bd4e8b0ffa8d9b6dc0 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 26 Jun 2022 09:15:25 -0700 Subject: [PATCH 149/178] update submodule OmniBLE: make consistent calculation for floating-point precision --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index aa7e8af82..ce5c715ac 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit aa7e8af82e288791edd331154e074a4ca8d64f2e +Subproject commit ce5c715ac849159234366c16f40cac62cf2b37a8 From b1121a3462f75d2416fdca84d85ea854b654a215 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 26 Jun 2022 09:18:36 -0700 Subject: [PATCH 150/178] update submodule rileylink_ios: make consistent calculation for floating-point precision --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 4115a59fe..0c3f02af2 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 4115a59fec18d2aaeb2c78aa6b32a0f3516867d8 +Subproject commit 0c3f02af2969487dd6ec30e32b5d3cac8d29f901 From ab1b9cb55c2afef3b193903970037aad214b5492 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 28 Jun 2022 17:34:36 -0700 Subject: [PATCH 151/178] update submodule OmniBLE: improve commonality with OmniKit --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index ce5c715ac..ffb10de49 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit ce5c715ac849159234366c16f40cac62cf2b37a8 +Subproject commit ffb10de490f4bb5d0f95aba91ebc4bafc7b5ce16 From be189b0764ce21f257e30fa221270e13c4ce70ff Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 28 Jun 2022 17:35:17 -0700 Subject: [PATCH 152/178] update submodule rileylink_ios: improve commonality with OmniBLE --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 0c3f02af2..6113f642a 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 0c3f02af2969487dd6ec30e32b5d3cac8d29f901 +Subproject commit 6113f642a69fb7590a411c62d5df5f802ea0d1f3 From 1b87b6539c4e6c607b5ee5212907f2c67bddfbbb Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 1 Aug 2022 06:45:12 -0700 Subject: [PATCH 153/178] update tests for submodules OmniBLE and rileylink_ios --- OmniBLE | 2 +- rileylink_ios | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OmniBLE b/OmniBLE index ffb10de49..0e88a546f 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit ffb10de490f4bb5d0f95aba91ebc4bafc7b5ce16 +Subproject commit 0e88a546f0f8f85414b13fc3b4e4141eff130cd8 diff --git a/rileylink_ios b/rileylink_ios index 6113f642a..dc4935183 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 6113f642a69fb7590a411c62d5df5f802ea0d1f3 +Subproject commit dc4935183e019b2c75ef45d926a4704bab45b30e From 76b4630c2c06ffe2ffeda7721c277af1155d5120 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 9 Aug 2022 17:18:41 -0700 Subject: [PATCH 154/178] Update submodules: No bolus when Pod suspended * match Loop-dev behavior * LoopKit, OmniBLE and rileylink_ios --- LoopKit | 2 +- OmniBLE | 2 +- rileylink_ios | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/LoopKit b/LoopKit index f2b614886..48092ac01 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit f2b614886693776b5f1cf83807d0b25984432000 +Subproject commit 48092ac01b9e48cbd7e04e61458b5852175003a3 diff --git a/OmniBLE b/OmniBLE index 0e88a546f..d42193bce 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 0e88a546f0f8f85414b13fc3b4e4141eff130cd8 +Subproject commit d42193bce05368ca1c8a64531468a16c5e5b2264 diff --git a/rileylink_ios b/rileylink_ios index dc4935183..f57a0f340 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit dc4935183e019b2c75ef45d926a4704bab45b30e +Subproject commit f57a0f340ccd8ef52e190abdc9f47b997f3868d2 From 2b7ba74dac44dd2aed4da3e10d12906f159044c6 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 6 Sep 2022 12:30:02 -0700 Subject: [PATCH 155/178] update submodule rileylink_ios: improved commonality and to better match Loop --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index f57a0f340..8c7dde693 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit f57a0f340ccd8ef52e190abdc9f47b997f3868d2 +Subproject commit 8c7dde693a6ccc057c80ba973989e5fa0b262cea From 575ab3553442d9873ba317a5cdd9da8c846ac843 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 6 Sep 2022 12:30:11 -0700 Subject: [PATCH 156/178] update submodule OmniBLE: Updates for improved commonality and to better match Loop --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index d42193bce..0d21e3cd4 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit d42193bce05368ca1c8a64531468a16c5e5b2264 +Subproject commit 0d21e3cd4904d7dc5f9a106f88e9f097403b9372 From cac0eeb52ff948356d5dc6d43287a79fd819c350 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 6 Sep 2022 12:30:20 -0700 Subject: [PATCH 157/178] update submodule Loop: enable build with Xcode 14 --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 2f1fc4668..de5e094f4 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 2f1fc46689f05465042bb246f68014ab7d1eb0f2 +Subproject commit de5e094f4355497fe5748c8dcbfad143bc356647 From a2accd6c215f8454d2286e1db9e2950036cb7c6a Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 6 Sep 2022 14:42:16 -0700 Subject: [PATCH 158/178] update submodule Loop; V2.2(210) with Xcode 14 fix --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index c9279bbd8..fd96375bd 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit c9279bbd812977374f1c0a4e3bc65bd736797718 +Subproject commit fd96375bdd2c45bc803d69b1747cacaf22adde4b From 51e208c9916e3d7b66ed7384f32fa30ba882fe5f Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 11 Sep 2022 19:59:32 -0700 Subject: [PATCH 159/178] update submodule OmniBLE: backports from dev and updates --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index 0d21e3cd4..aeeac18a2 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 0d21e3cd4904d7dc5f9a106f88e9f097403b9372 +Subproject commit aeeac18a2ed3e0ef36c97e2df4a02a4bdf914f5a From 1cd60436ecb82a5b55d4527b80ced0ec36b89763 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 11 Sep 2022 19:59:41 -0700 Subject: [PATCH 160/178] update submodule rileylink_ios: backports from dev and updates --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 8c7dde693..c0ec8a13b 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 8c7dde693a6ccc057c80ba973989e5fa0b262cea +Subproject commit c0ec8a13b0b2c2e92887677b598b530e09d21819 From 8b06d3e990d8cae7cc2f906d7e8324fa55d57179 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 19 Sep 2022 15:46:26 -0700 Subject: [PATCH 161/178] update submodule rileylink_ios: restore MDT diagnostic commands --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index c0ec8a13b..aa6c84960 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit c0ec8a13b0b2c2e92887677b598b530e09d21819 +Subproject commit aa6c849604ec1938f1abab3a7cd0cce9983a2a4e From ceb22e9c56e8c13171c93ab95f6ee5dd637ca6b6 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 7 Oct 2022 11:46:56 -0700 Subject: [PATCH 162/178] Update multiple submodules: Translations from Jon-B-M Crowdin --- Loop | 2 +- LoopKit | 2 +- rileylink_ios | 2 +- xdrip-client-swift | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Loop b/Loop index de5e094f4..1cd6ff51b 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit de5e094f4355497fe5748c8dcbfad143bc356647 +Subproject commit 1cd6ff51b22b117cae711939cf42c75e11cb0803 diff --git a/LoopKit b/LoopKit index 48092ac01..6468e82b3 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 48092ac01b9e48cbd7e04e61458b5852175003a3 +Subproject commit 6468e82b36393b64106e15ca55e5c0a4b84d6737 diff --git a/rileylink_ios b/rileylink_ios index aa6c84960..1628cafd7 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit aa6c849604ec1938f1abab3a7cd0cce9983a2a4e +Subproject commit 1628cafd770fb670d37960db65c7dde06adfdc17 diff --git a/xdrip-client-swift b/xdrip-client-swift index 4d98d54c8..ba1980424 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit 4d98d54c812db2f303b00232ffac3ac39b72248c +Subproject commit ba1980424f16e038e8b2b513171203358f2045f0 From f9acc325847677a7072762f24434274abc0c66a3 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 7 Oct 2022 11:48:33 -0700 Subject: [PATCH 163/178] updated submodule rileylink_ios: format fix for MDT battery --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index 1628cafd7..f2b0c8a89 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 1628cafd770fb670d37960db65c7dde06adfdc17 +Subproject commit f2b0c8a89aecdfde320148605124835cd5c20293 From b2ab59d6921a2eb83da0cf53101efd344eae2930 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 15 Nov 2022 15:58:25 -0800 Subject: [PATCH 164/178] update submodule OmniBLE: fix basal schedule extra command logic --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index aeeac18a2..41cf43232 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit aeeac18a2ed3e0ef36c97e2df4a02a4bdf914f5a +Subproject commit 41cf43232e1b0a89b9d086e6900916830f12480b From 7718a1d689b2cd74e16c4cca32895771b37ada34 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 15 Nov 2022 15:59:05 -0800 Subject: [PATCH 165/178] update submodule rileylink_ios: fix basal schedule extra command logic --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index f2b0c8a89..e7d7ba83e 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit f2b0c8a89aecdfde320148605124835cd5c20293 +Subproject commit e7d7ba83ee8bd19ef0ce0bf05ea26efbdb051bc2 From 5a22d19b73e051813c7be23222e84155b1232956 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 4 Dec 2022 10:29:18 -0800 Subject: [PATCH 166/178] update OmniBLE submodule: underlying support for extended-bolus --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index 41cf43232..a6f8351e7 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 41cf43232e1b0a89b9d086e6900916830f12480b +Subproject commit a6f8351e747daf54593626ff2dfc7fd86dcb9d8a From efd9241e7c86e69fdb9015691e69947d1c13ed78 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 4 Dec 2022 10:29:31 -0800 Subject: [PATCH 167/178] update rileylink_ios submodule: underlying support for extended-bolus --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index e7d7ba83e..1da46d7c7 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit e7d7ba83ee8bd19ef0ce0bf05ea26efbdb051bc2 +Subproject commit 1da46d7c7446c9ada4f255e2317149eaf294d213 From 23ff5f7f5d4f08c1d880ae6d11fd255f3c9b7aa2 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 17 Dec 2022 08:34:46 -0800 Subject: [PATCH 168/178] update pod submodules: fix length check for DetailedStatus --- OmniBLE | 2 +- rileylink_ios | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OmniBLE b/OmniBLE index a6f8351e7..01ae46b6c 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit a6f8351e747daf54593626ff2dfc7fd86dcb9d8a +Subproject commit 01ae46b6c811ce29246799657a9a22a7e772fbf0 diff --git a/rileylink_ios b/rileylink_ios index 1da46d7c7..c80ffc7ca 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit 1da46d7c7446c9ada4f255e2317149eaf294d213 +Subproject commit c80ffc7cabea634c452c2c848ea608bfe3f35adf From dc27707cdef6921d9bea47c6d28955c70ca3497d Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 11 Jan 2023 10:12:14 -0800 Subject: [PATCH 169/178] update submodule Loop: check for invalidFutureGlucose --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 1cd6ff51b..d4351768e 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 1cd6ff51b22b117cae711939cf42c75e11cb0803 +Subproject commit d4351768edff58e0c68e2b0f18bb5d1661ba05d6 From 8145228fab396f0496489d017c41ea08135e43da Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 10 May 2023 12:23:48 -0700 Subject: [PATCH 170/178] update submodules for Xcode 14.3: Amplitude-iOS, MKRingProgressView, SwiftCharts --- Amplitude-iOS | 2 +- MKRingProgressView | 2 +- SwiftCharts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Amplitude-iOS b/Amplitude-iOS index 3fa2d1199..136dee674 160000 --- a/Amplitude-iOS +++ b/Amplitude-iOS @@ -1 +1 @@ -Subproject commit 3fa2d1199a042067cd6c402ce5752678891a0e25 +Subproject commit 136dee674640932829e246e8012ce990afaa42dc diff --git a/MKRingProgressView b/MKRingProgressView index f9cb12280..9b76ac0d8 160000 --- a/MKRingProgressView +++ b/MKRingProgressView @@ -1 +1 @@ -Subproject commit f9cb1228053ed114bbdbf3e90ae70c4cc30d0de0 +Subproject commit 9b76ac0d897873f328a0ddf813ec62fc7da82fc3 diff --git a/SwiftCharts b/SwiftCharts index e3d2a5725..f9a071c3e 160000 --- a/SwiftCharts +++ b/SwiftCharts @@ -1 +1 @@ -Subproject commit e3d2a57252b04a1cb6e4d56fcc23d9bea0abca5e +Subproject commit f9a071c3ec16dc00fa1329dbdbcaf2e4677071b1 From 77712f078ac0be84f58f0672e807643de054867a Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 10 May 2023 12:31:37 -0700 Subject: [PATCH 171/178] update submodule OmniBLE: better match to DASH PDM ref codes --- OmniBLE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OmniBLE b/OmniBLE index 01ae46b6c..2c9067b61 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit 01ae46b6c811ce29246799657a9a22a7e772fbf0 +Subproject commit 2c9067b61dabe9d7899dc7858cb29622b673b274 From a340af02988a69a1f8b09a96a6d9d6f3d0702f9e Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 10 May 2023 12:41:20 -0700 Subject: [PATCH 172/178] update submodule libre-direct-client-swift: translations --- libre-direct-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libre-direct-client-swift b/libre-direct-client-swift index 976be151b..bd2ac0e47 160000 --- a/libre-direct-client-swift +++ b/libre-direct-client-swift @@ -1 +1 @@ -Subproject commit 976be151b255646f3071c48a4b3acc06b9564447 +Subproject commit bd2ac0e47f218de00ce4e3c41455fefa861f4177 From bcb0f8371e7afb145ddc802a2259126f22558609 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 10 May 2023 12:58:00 -0700 Subject: [PATCH 173/178] update submodule rileylink_ios: improved pod handling and messages --- rileylink_ios | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rileylink_ios b/rileylink_ios index c80ffc7ca..393b1a055 160000 --- a/rileylink_ios +++ b/rileylink_ios @@ -1 +1 @@ -Subproject commit c80ffc7cabea634c452c2c848ea608bfe3f35adf +Subproject commit 393b1a0553d4865c2063f7025abebd96a0f38e6e From 7e49b415a1eff2c6c3aaf6eb4ca6f8cfc9765a73 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 11 May 2023 10:54:45 -0700 Subject: [PATCH 174/178] update submodule Loop: version 2.3.02, minor release --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index d4351768e..ec4b0d65e 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit d4351768edff58e0c68e2b0f18bb5d1661ba05d6 +Subproject commit ec4b0d65e09f09cf7e71ff6310b01866096f846a From a3304e7218cb2c751b91a15cbe68cca083a4d71a Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 11 May 2023 11:14:38 -0700 Subject: [PATCH 175/178] no change to xdrip-client-swift, update commit SHA-1 only --- xdrip-client-swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xdrip-client-swift b/xdrip-client-swift index ba1980424..bfe4fdfc9 160000 --- a/xdrip-client-swift +++ b/xdrip-client-swift @@ -1 +1 @@ -Subproject commit ba1980424f16e038e8b2b513171203358f2045f0 +Subproject commit bfe4fdfc9bf8a537c3f6b9c275030a526f637905 From 1d79e6771c4b0ad976c41955d0e5b79d55cb9edc Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 11 May 2023 11:39:46 -0700 Subject: [PATCH 176/178] update submodule Loop: match freeaps_dev and freeaps SHA --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index ec4b0d65e..cb4f3b288 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit ec4b0d65e09f09cf7e71ff6310b01866096f846a +Subproject commit cb4f3b288f304669a840fdd99fa8f07648bb8a94 From cddec2435b111e240c661d8e92c744be4da1d7de Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 31 Oct 2023 19:10:23 -0700 Subject: [PATCH 177/178] Update README.md --- README.md | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 154019c16..b5c70e787 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,37 @@ # Attention please! -There are so many people who rely on the FreeAPS fork of Loop that it has been forked again to the loopnlearn github site. There are no guarantees as to how long this support can be maintained, but the loopnlearn team will do their best and are willing to accept pull requests. +FreeAPS is no longer supported. -With the advent of maintenance by loopnlearn, the [FreeAPS crowdin](https://crowdin.com/project/freeaps-settings) has been expanded to cover more strings. +* branch freeaps: limited to Xcode 14 and iOS 16 +* branch freeaps_dev: modified to build with Xcode 15 +* other branches in this repository are tied to LoopKit (Loop 3) -Ivan - the originator of the FreeAPS project (ivalkou github site) has frozen his repository. All the forces of Ivan's team are aimed at developing a new project FreeAPS X based on OpenAPS. +# LoopWorkspace - How To Build -# LoopWorkspace - Build Using Script - -To simplify building FreeAPS, the loopnlearn team developed a script. It works for Loop and for FreeAPS and is documented in two places. (LoopDocs has more details and graphics - both sites have the same information.) +## Clone -**If you have not already ensured your macOS and Xcode versions are consistent with your iPhone iOS, please use these links and follow the instructions.** +This repository uses git submodules to pull in the various workspace dependencies. -* Loop and Learn website: [Build Select Script](https://www.loopandlearn.org/build-select/) -* LoopDocs website: [LoopDocs Updating](https://loopkit.github.io/loopdocs/build/updating) +To manually clone this repo: -# LoopWorkspace - Manual Build +For freeaps, copy and paste this into the terminal -This section has the manual steps if you do not choose to use the script. +``` +export BRANCH_NAME="freeaps" +``` -## Clone +For freeaps_dev, copy and paste this into the terminal -This repository uses git submodules to pull in the various workspace dependencies. +``` +export BRANCH_NAME="freeaps_dev" +``` -To manually clone this repo (without using the script mentioned above): +Then issue the clone command. ``` -git clone --branch=freeaps --recurse-submodules https://github.com/loopnlearn/LoopWorkspace +git clone --branch=$BRANCH_NAME --recurse-submodules https://github.com/loopnlearn/LoopWorkspace ``` - ## Open Change to the cloned directory and open the workspace in Xcode: From 516f0b5833a4f7aa34417062c676f6911cc1466b Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 1 May 2024 16:56:23 -0700 Subject: [PATCH 178/178] Update the README.md file for branches that are not supported --- README.md | 50 +++++++++++++------------------------------------- 1 file changed, 13 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index b5c70e787..c0a8404c9 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,24 @@ -# Attention please! +## Do Not Use This Branch -FreeAPS is no longer supported. +This branch is kept for historical reasons. It is not supported and might not be usable with newer versions of Xcode and iOS. -* branch freeaps: limited to Xcode 14 and iOS 16 -* branch freeaps_dev: modified to build with Xcode 15 -* other branches in this repository are tied to LoopKit (Loop 3) +Please refer to the original repository to build Loop Verson 3 (and later): https://github.com/LoopKit/LoopWorkspace -# LoopWorkspace - How To Build +* That is where Loop updates originate. -## Clone +* The `main` and `dev` branches for this GitHub username (loopnlearn) fork of LoopWorkspace are manually updated to match LoopKit / LoopWorkspace, but you should not rely on this process. -This repository uses git submodules to pull in the various workspace dependencies. +* The other branches are no longer supported and should not be used. -To manually clone this repo: +## History -For freeaps, copy and paste this into the terminal +There was a fork created from LoopKit / LoopWorkspace called ivalkou / LoopWorkspace which was used to create an alternative to Loop version 2, called FreeAPS. -``` -export BRANCH_NAME="freeaps" -``` +This fork, loopnlearn / LoopWorkspace was created from ivalkou / LoopWorkspace and used to support the FreeAPS version of Loop 2 after support was dropped by the ivalkou GitHub account. -For freeaps_dev, copy and paste this into the terminal +* **FreeAPS is no longer supported and should not be used** +* Most features people used with FreeAPS are now included in Loop 3 or can be added with customization -``` -export BRANCH_NAME="freeaps_dev" -``` +Some branches in this repository were configured to add specific customizations for earlier versions of Loop 3. These are no longer needed and are not kept updated. [Customization scripts](https://www.loopandlearn.org/custom-code) are provided instead. -Then issue the clone command. - -``` -git clone --branch=$BRANCH_NAME --recurse-submodules https://github.com/loopnlearn/LoopWorkspace -``` - -## Open - -Change to the cloned directory and open the workspace in Xcode: - -``` -cd LoopWorkspace -xed . -``` - -## Build - -Select the "Loop (Workspace)" scheme (not the "Loop" scheme) and Build, Run, or Test. - -Image showing how to select the Loop (Workspace) scheme in Xcode +* Branches such as **main_lnl_patches** are out-of-date and should not be used