fastlane-plugin-appbox 3.5.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8a3d1c761409556356ec39f0991325907fcb51f6d3cdc003500f22818a0d31ab
4
- data.tar.gz: 907b7f796e46350974092ea21e578c2fae8af565d3075b5ebc11f6f7038c6516
3
+ metadata.gz: 985df3a0ef7d9ac530fa7b9446a659cb3fd866005acf71b8dda922e537137629
4
+ data.tar.gz: a22b641a959bdd754262adc06d98cc0bf427e11e2f6656da503a9e78bf03bcab
5
5
  SHA512:
6
- metadata.gz: 547103bab6e974465c46c235af121279b801d400680c2f1b034dc6a0c8ea9e38a5ef64c0431f4840d1cf60b2d87018167c22d445d4233d2acf00ed40336532ea
7
- data.tar.gz: 0d08e26a75304f1c8563c850f0dd5e6ecd500daa536bf7527b637f2c5e651bdf22630343a17521f3ce3a49cbc2087033e5dd39e59283ef5a97d23a77a231f3f1
6
+ metadata.gz: c68ba482fe892371f11e752da1a571bd08e21547895b1bcbda0d512ddccec83231509c4925669fcffba9cb05b031a07327fd257a6ec24b38c0f2b1594b1ff416
7
+ data.tar.gz: 3dfbbd52d8be06b3ca6a1fc25d0cc7e6912aaa834425380b288db25c10efa1b9a8238c07d88440bd06bde5dc82e8e6b364f2099e99c16025fd657ffcff601fe4
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # AppBox Plugin for Fastlane
2
2
 
3
3
  [![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-appbox)
4
+ [![Test](https://github.com/getappbox/fastlane-plugin-appbox/actions/workflows/test.yml/badge.svg)](https://github.com/getappbox/fastlane-plugin-appbox/actions/workflows/test.yml)
4
5
 
5
6
  ## 1. Getting Started
6
7
 
@@ -10,19 +11,49 @@
10
11
  fastlane add_plugin appbox
11
12
  ```
12
13
 
13
- **Step 2** - Download the latest version of AppBox from [here](https://github.com/vineetchoudhary/AppBox-iOSAppsWirelessInstallation/releases) or [here](https://getappbox.com/download) and install it into `/Applications` directory of you mac. Now, open AppBox and login with your Dropbox account.
14
+ **Step 2** - Install AppBox using one of the following methods:
15
+
16
+ - **Direct Install:**
17
+ ```bash
18
+ curl -s https://getappbox.com/install.sh | bash
19
+ ```
20
+
21
+ - **Homebrew:**
22
+ ```bash
23
+ brew install --cask appbox
24
+ ```
25
+
26
+ Now, open AppBox and login with your Dropbox account.
27
+
28
+ This plugin targets **AppBox 4.0 or later**, which requires macOS 15 Sequoia or later.
14
29
 
15
30
  **Step 3** - Define appbox action in your project Fastfile with emails and message. Here the available params for appbox plugins -
16
31
 
17
- - `emails` (Required | String) - Comma-separated list of email address that should receive application installation link.
18
- - `message` (Optional | String) - Attach personal message in the email. Supported Keywords:
19
- >The {PROJECT_NAME} - For Project Name,
20
- >{BUILD_VERSION} - For Build Version, and
21
- >{BUILD_NUMBER} - For Build Number.
22
- - `appbox_path` (Optional | String) - If you've setup AppBox in the different directory then you need to mention that here. Default is `/Applications/AppBox.app`
32
+ - `emails` (Optional | String) - Comma-separated list of email address that should receive application installation link.
33
+ - `message` (Optional | String) - A personal message shown under "Message from the developer" in the email, such as `'Here is the latest build.'`. Sent exactly as written — see [Using build details in the message](#using-build-details-in-the-message) to include the version or build number, or if you are moving off the AppBox 3 placeholders.
23
34
  - `keep_same_link` (Optional | Bool) - This feature will keep same short URL for all future build/IPA uploaded with same bundle identifier. If this option is enabled, you can also download the previous build with the same URL. Read more [here](https://docs.getappbox.com/Features/keepsamelink/).
35
+ - `slack_webhook_url` (Optional | String) - Slack Incoming Webhook URL to post a notification to a Slack channel.
36
+ - `ms_teams_webhook_url` (Optional | String) - Microsoft Teams Incoming Webhook URL to post a notification to a Teams channel.
37
+ - `webhook_message` (Optional | String) - **Deprecated and ignored since AppBox 4**, which generates the notification text from the build itself. The plugin warns and drops it, so existing Fastfiles keep working unchanged.
24
38
  - `dropbox_folder_name` (Optional | String) - You can change the link by providing a Custom Dropbox Folder Name. By default folder name will be the application bundle identifier. So, AppBox will keep the same link for the IPA file available in the same folder. Read more [here](https://docs.getappbox.com/Features/keepsamelink/).
25
39
 
40
+ ### Using build details in the message
41
+
42
+ `message` is plain text and is sent exactly as written, so most Fastfiles just pass a sentence. To include the version, build number or app name, interpolate them from fastlane in a **double-quoted** string, since Ruby only expands `#{}` there:
43
+
44
+ ```rb
45
+ message: "MyApp #{get_version_number}(#{get_build_number}) is ready to test.",
46
+ ```
47
+
48
+ AppBox 3 used to do this for you by substituting `{BUILD_NAME}`, `{BUILD_VERSION}` and `{BUILD_NUMBER}`. AppBox 4 removed that substitution, so a message still containing them arrives with the braces intact. Replace them as follows:
49
+
50
+ | AppBox 3 placeholder | Replace with |
51
+ | --- | --- |
52
+ | `{BUILD_NAME}` | your app or scheme name, or `#{File.basename(lane_context[SharedValues::IPA_OUTPUT_PATH], '.ipa')}` |
53
+ | `{BUILD_VERSION}` | `#{get_version_number}` |
54
+ | `{BUILD_NUMBER}` | `#{get_build_number}` |
55
+ | `{SHARE_URL}` | Nothing to do. It only applied to `webhook_message`, which AppBox 4 ignores and generates itself. |
56
+
26
57
 
27
58
  ## 2. Demo Fastfile with a lane `gymbox` with Different Options
28
59
 
@@ -50,7 +81,7 @@ platform :ios do
50
81
  lane :gymbox do
51
82
  gym
52
83
  appbox(
53
- emails: 'you@example.com,'someoneelse@example.com',
84
+ emails: 'you@example.com,someoneelse@example.com',
54
85
  )
55
86
  end
56
87
  end
@@ -66,7 +97,7 @@ platform :ios do
66
97
  gym
67
98
  appbox(
68
99
  emails: 'you@example.com',
69
- message: '{PROJECT_NAME} - {BUILD_VERSION}({BUILD_NUMBER}) is ready to test.',
100
+ message: 'Please test the new checkout flow.',
70
101
  )
71
102
  end
72
103
  end
@@ -82,7 +113,7 @@ platform :ios do
82
113
  gym
83
114
  appbox(
84
115
  emails: 'you@example.com',
85
- message: '{PROJECT_NAME} - {BUILD_VERSION}({BUILD_NUMBER}) is ready to test.',
116
+ message: 'Here is the latest build.',
86
117
  keep_same_link: true,
87
118
  )
88
119
  end
@@ -99,7 +130,7 @@ platform :ios do
99
130
  gym
100
131
  appbox(
101
132
  emails: 'you@example.com',
102
- message: '{PROJECT_NAME} - {BUILD_VERSION}({BUILD_NUMBER}) is ready to test.',
133
+ message: 'Here is the latest build.',
103
134
  keep_same_link: true,
104
135
  dropbox_folder_name: 'Fastlane-Demo-Keep-Same-Link',
105
136
  )
@@ -107,33 +138,13 @@ platform :ios do
107
138
  end
108
139
  ```
109
140
 
110
- #### 6. Upload IPA file where AppBox available at some custom path instead of macOS Application Directory.
111
-
112
- ```rb
113
- default_platform(:ios)
114
-
115
- platform :ios do
116
- lane :gymbox do
117
- gym
118
- appbox(
119
- emails: 'you@example.com,'someoneelse@example.com',
120
- appbox_path:'/Users/vineetchoudhary/Desktop/AppBox3.4.0/AppBox.app',
121
- )
122
- end
123
- end
124
- ```
125
-
126
- #### Note
127
- When you run this for the first time, a pop-up will appear stating that "Terminal.app" wants to access data from other apps. You must allow this to copy the IPA file to the Appbox temporary directory, enabling Appbox to access and upload it.
128
- ![](/AppBox-Fastlane-Demo-Project/images/terminal-permission.webp)
129
-
130
141
  ## 3. Supported AppBox link access via Fastlane SharedValues
131
142
  - `APPBOX_SHARE_URL` - AppBox short shareable URL to install uploaded application.
132
143
  - `APPBOX_IPA_URL`- Upload IPA file URL to download IPA file.
133
144
  - `APPBOX_MANIFEST_URL` - Manifest file URL for upload application.
134
145
 
135
146
  ## 4. About AppBox
136
- [AppBox](https://getappbox.com) is a tool for iOS developers to build and deploy Development, Ad-Hoc and In-house (Enterprise) applications directly to the devices from your Dropbox account. Also, available on [Github](https://github.com/vineetchoudhary/AppBox-iOSAppsWirelessInstallation).
147
+ [AppBox](https://getappbox.com) is a tool for iOS developers to build and deploy Development, Ad-Hoc and In-house (Enterprise) applications directly to the devices from your Dropbox account. Also, available on [Github](https://github.com/getappbox/AppBox-iOSAppsWirelessInstallation).
137
148
 
138
149
  ## 5. Example
139
150
 
@@ -142,6 +153,6 @@ Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plu
142
153
  ## 6. Issues and Feedback
143
154
  For any other issues and feedback about this plugin, please submit it to this [repository](https://github.com/getappbox/fastlane-plugin-appbox/issues/new).
144
155
 
145
- ## 6. Troubleshooting
156
+ ## 7. Troubleshooting
146
157
  If you have trouble using plugins, check out the [Plugins Troubleshooting](https://docs.fastlane.tools/plugins/plugins-troubleshooting/) guide.
147
158
 
@@ -1,4 +1,5 @@
1
1
  require "json"
2
+ require "shellwords"
2
3
  require 'fastlane/action'
3
4
  require_relative '../helper/appbox_helper'
4
5
 
@@ -12,23 +13,24 @@ module Fastlane
12
13
 
13
14
  class AppboxAction < Action
14
15
  def self.run(params)
15
-
16
- #custom dropbox folder name
16
+ # custom dropbox folder name
17
17
  if params[:dropbox_folder_name]
18
18
  dropbox_folder_name = params[:dropbox_folder_name]
19
19
  UI.message("Dropbox folder name - #{dropbox_folder_name}")
20
20
  end
21
21
 
22
- #AppBox CLI
22
+ # AppBox CLI
23
23
  appboxcli = "appboxcli"
24
24
  appboxcli_path = `which #{appboxcli}`.strip
25
25
  if appboxcli_path.empty?
26
- UI.error("AppBox CLI not found. Please install AppBox CLI first. Read more here - https://docs.getappbox.com/Installation/MacOS/#command-line-interface-cli")
27
- exit
26
+ UI.user_error!("AppBox CLI not found. Install it from AppBox Preferences > General, or read more here - https://docs.getappbox.com/CommandLineInterface/")
28
27
  end
29
28
 
30
- ipa_path = Actions.lane_context[ Actions::SharedValues::IPA_OUTPUT_PATH ]
31
- ipa_file_name = File.basename(ipa_path)
29
+ ipa_path = Actions.lane_context[Actions::SharedValues::IPA_OUTPUT_PATH]
30
+ if ipa_path.nil? || ipa_path.to_s.empty?
31
+ UI.user_error!("No IPA found. Run `gym`/`build_app` before `appbox`, or set lane_context[SharedValues::IPA_OUTPUT_PATH] yourself.")
32
+ end
33
+ UI.user_error!("IPA not found at #{ipa_path}") unless File.exist?(ipa_path)
32
34
  UI.message("IPA PATH - #{ipa_path}")
33
35
 
34
36
  # Start AppBox
@@ -36,55 +38,49 @@ module Fastlane
36
38
  UI.message("Starting AppBox...")
37
39
  UI.message("Upload process will start soon. Upload process might take a few minutes. Please don't interrupt the script.")
38
40
 
39
- command = "#{appboxcli} --ipa '#{ipa_path}'"
41
+ # Built as an argv array and run without a shell, so a value containing a
42
+ # quote or a space cannot break the command.
43
+ args = [appboxcli, "--ipa", ipa_path.to_s]
40
44
 
41
- #Add emails param in command
42
45
  if params[:emails]
43
- command << " --emails '#{params[:emails]}'"
46
+ args += ["--emails", params[:emails].to_s]
44
47
  UI.message("Emails - #{params[:emails]}")
45
48
  end
46
49
 
47
- #Add message param in command
48
50
  if params[:message]
49
- command << " --message '#{params[:message]}'"
51
+ args += ["--message", params[:message].to_s]
50
52
  UI.message("Message - #{params[:message]}")
51
53
  end
52
54
 
53
- #Add Keep Same Link param in command
54
55
  if params[:keep_same_link] == true
55
- command << " --keepsamelink"
56
+ args << "--keepsamelink"
56
57
  UI.message("Keep Same Link - #{params[:keep_same_link]}")
57
58
  end
58
59
 
59
- #Add dropbox folder name param in command
60
60
  if dropbox_folder_name
61
- command << " --dbfolder '#{dropbox_folder_name}'"
61
+ args += ["--dbfolder", dropbox_folder_name.to_s]
62
62
  UI.message("Dropbox Folder Name - #{dropbox_folder_name}")
63
63
  end
64
64
 
65
- #Add Slack Webhook URL param in command
66
65
  if params[:slack_webhook_url]
67
- command << " --slackwebhook '#{params[:slack_webhook_url]}'"
66
+ args += ["--slackwebhook", params[:slack_webhook_url].to_s]
68
67
  UI.message("Slack Webhook URL - #{params[:slack_webhook_url]}")
69
68
  end
70
69
 
71
- #Add MS Teams Webhook URL param in command
72
70
  if params[:ms_teams_webhook_url]
73
- command << " --msteamswebhook '#{params[:ms_teams_webhook_url]}'"
71
+ args += ["--msteamswebhook", params[:ms_teams_webhook_url].to_s]
74
72
  UI.message("MS Teams Webhook URL - #{params[:ms_teams_webhook_url]}")
75
73
  end
76
74
 
77
- #Add Webhook Message param in command
78
75
  if params[:webhook_message]
79
- command << " --webhookmessage '#{params[:webhook_message]}'"
80
- UI.message("Webhook Message - #{params[:webhook_message]}")
76
+ UI.important("webhook_message is deprecated and ignored since AppBox 4 - the notification text is generated from the build.")
81
77
  end
82
78
 
83
- UI.message("AppBox Command - #{command}")
84
-
85
- # Execute command
86
- exit_status = system("exec #{command}")
87
-
79
+ UI.message("AppBox Command - #{Shellwords.join(args)}")
80
+
81
+ # Execute without a shell.
82
+ exit_status = system(*args)
83
+
88
84
  # Print upload status
89
85
  if exit_status
90
86
  UI.success("Successfully uploaded the IPA file to DropBox. Check below summary for more details.")
@@ -99,10 +95,9 @@ module Fastlane
99
95
  FastlaneCore::PrintTable.print_values(config: share_urls_values, hide_keys: [], title: "Summary for AppBox")
100
96
  end
101
97
  UI.success('AppBox finished successfully')
102
- else
98
+ else
103
99
  UI.error('AppBox finished with errors')
104
- UI.message('Please feel free to open an issue on the project GitHub page. Please include a description of what is not working right with your issue. https://github.com/getappbox/fastlane-plugin-appbox/issues/new')
105
- exit
100
+ UI.user_error!('AppBox upload failed. Please feel free to open an issue on the project GitHub page, including a description of what is not working. https://github.com/getappbox/fastlane-plugin-appbox/issues/new')
106
101
  end
107
102
  end
108
103
 
@@ -110,7 +105,7 @@ module Fastlane
110
105
  [
111
106
  ['APPBOX_IPA_URL', 'Upload IPA file URL to download IPA file.'],
112
107
  ['APPBOX_MANIFEST_URL', 'Manifest file URL for upload application.'],
113
- ['APPBOX_SHARE_URL', 'AppBox short shareable URL to install uploaded application.'],
108
+ ['APPBOX_SHARE_URL', 'AppBox short shareable URL to install uploaded application.']
114
109
  ]
115
110
  end
116
111
 
@@ -135,7 +130,7 @@ module Fastlane
135
130
 
136
131
  FastlaneCore::ConfigItem.new(key: :message,
137
132
  env_name: "FL_APPBOX_MESSAGE",
138
- description: "Attach personal message in the email. Supported Keywords: The {BUILD_NAME} - For Build Name, {BUILD_VERSION} - For Build Version, and {BUILD_NUMBER} - For Build Number",
133
+ description: "A personal message shown under \"Message from the developer\" in the email, e.g. 'Here is the latest build.'. Sent exactly as written; AppBox 4 does not substitute the {BUILD_NAME}/{BUILD_VERSION}/{BUILD_NUMBER} placeholders AppBox 3 supported",
139
134
  optional: true),
140
135
 
141
136
  FastlaneCore::ConfigItem.new(key: :keep_same_link,
@@ -162,13 +157,13 @@ module Fastlane
162
157
 
163
158
  FastlaneCore::ConfigItem.new(key: :webhook_message,
164
159
  env_name: "FL_APPBOX_WEBHOOK_MESSAGE",
165
- description: "Custom message to send along with Slack or Microsoft Teams notification. Supported Keywords: {BUILD_NAME}, {BUILD_VERSION}, {BUILD_NUMBER}, {SHARE_URL}",
166
- optional: true),
160
+ description: "Deprecated and ignored since AppBox 4, which generates the notification text from the build. Accepted, with a warning, so existing Fastfiles keep working",
161
+ optional: true)
167
162
  ]
168
163
  end
169
164
 
170
165
  def self.is_supported?(platform)
171
- [:ios].include? platform
166
+ [:ios].include?(platform)
172
167
  end
173
168
  end
174
169
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module Appbox
3
- VERSION = "3.5.0"
3
+ VERSION = "4.0.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-appbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vineet Choudhary
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-09-21 00:00:00.000000000 Z
11
+ date: 2026-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry