diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8689fe3..7c2dfc6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## [v1.2.1] - 2025-02-20
+
+### addy.io
+
+**Added**
+- Added the ability to only copy the email addresses when sending mail from the app
+
## [v1.2.0] - 2025-02-01
### addy.io
diff --git a/addy.xcodeproj/project.pbxproj b/addy.xcodeproj/project.pbxproj
index 2504e02..ea17f5f 100644
--- a/addy.xcodeproj/project.pbxproj
+++ b/addy.xcodeproj/project.pbxproj
@@ -1769,7 +1769,7 @@
CODE_SIGN_ENTITLEMENTS = addy/addy.debug.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_ASSET_PATHS = "\"addy/Preview Content\"";
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_PREVIEWS = YES;
@@ -1789,7 +1789,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy.debug;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -1809,7 +1809,7 @@
CODE_SIGN_ENTITLEMENTS = AddyStatisticWidgetExtension.debug.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -1823,7 +1823,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy.debug.AddyStatisticWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -1840,7 +1840,7 @@
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.debug.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -1854,7 +1854,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy.debug.AddyShareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -1950,7 +1950,7 @@
CODE_SIGN_ENTITLEMENTS = addy/addy.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_ASSET_PATHS = "\"addy/Preview Content\"";
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_PREVIEWS = YES;
@@ -1970,7 +1970,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -1990,7 +1990,7 @@
CODE_SIGN_ENTITLEMENTS = AddyStatisticWidgetExtension.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -2004,7 +2004,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy.AddyStatisticWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -2022,7 +2022,7 @@
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -2036,7 +2036,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy.AddyShareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -2072,7 +2072,7 @@
CODE_SIGN_ENTITLEMENTS = AddyStatisticWidgetExtension.debug.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -2086,7 +2086,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy.debug.AddyStatisticWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -2105,7 +2105,7 @@
CODE_SIGN_ENTITLEMENTS = AddyStatisticWidgetExtension.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -2119,7 +2119,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy.AddyStatisticWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -2137,7 +2137,7 @@
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.debug.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -2151,7 +2151,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy.debug.AddyShareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -2169,7 +2169,7 @@
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -2183,7 +2183,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy.AddyShareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -2329,7 +2329,7 @@
CODE_SIGN_ENTITLEMENTS = addy/addy.debug.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_ASSET_PATHS = "\"addy/Preview Content\"";
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_PREVIEWS = YES;
@@ -2349,7 +2349,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy.debug;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -2370,7 +2370,7 @@
CODE_SIGN_ENTITLEMENTS = addy/addy.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 22;
+ CURRENT_PROJECT_VERSION = 23;
DEVELOPMENT_ASSET_PATHS = "\"addy/Preview Content\"";
DEVELOPMENT_TEAM = 83RFSJ6CUP;
ENABLE_PREVIEWS = YES;
@@ -2390,7 +2390,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.2.0;
+ MARKETING_VERSION = 1.2.1;
PRODUCT_BUNDLE_IDENTIFIER = host.stjin.addy;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
diff --git a/addy.xcodeproj/project.xcworkspace/xcuserdata/stjin.xcuserdatad/UserInterfaceState.xcuserstate b/addy.xcodeproj/project.xcworkspace/xcuserdata/stjin.xcuserdatad/UserInterfaceState.xcuserstate
index 6a825fa..3389f09 100644
Binary files a/addy.xcodeproj/project.xcworkspace/xcuserdata/stjin.xcuserdatad/UserInterfaceState.xcuserstate and b/addy.xcodeproj/project.xcworkspace/xcuserdata/stjin.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/addy.xcodeproj/xcuserdata/stjin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/addy.xcodeproj/xcuserdata/stjin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
index e866770..629c6e0 100644
--- a/addy.xcodeproj/xcuserdata/stjin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+++ b/addy.xcodeproj/xcuserdata/stjin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -3140,54 +3140,6 @@
landmarkType = "7">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addy/Localizable.xcstrings b/addy/Localizable.xcstrings
index e313389..14002f2 100644
--- a/addy/Localizable.xcstrings
+++ b/addy/Localizable.xcstrings
@@ -850,7 +850,7 @@
"en" : {
"stringUnit" : {
"state" : "translated",
- "value" : "**What’s new in addy.io for iOS 1.2.0**\n\n**Added**\n- Added the ability to change the default tab to open on app launch\n- Added the ability to download failed deliveries (if enabled)\n\n**Fixed/Improved**\n- Improve wording of dates in alias list"
+ "value" : "**What’s new in addy.io for iOS 1.2.1**\n\n**Added**\n- Added the ability to only copy the email addresses when sending mail from the app"
}
}
}
diff --git a/addy/View/aliases/AliasesView.swift b/addy/View/aliases/AliasesView.swift
index fc12fe6..c5f0a48 100644
--- a/addy/View/aliases/AliasesView.swift
+++ b/addy/View/aliases/AliasesView.swift
@@ -304,9 +304,11 @@ struct AliasesView: View {
}
.sheet(item: $aliasToSendMailFrom) { alias in
NavigationStack {
- EditAliasSendMailRecipientBottomSheet(aliasEmail: alias.email) { addresses in
+ EditAliasSendMailRecipientBottomSheet(aliasEmail: alias.email, onPressSend: { addresses in
self.onPressSend(client:nil, sendToRecipients: addresses)
- }
+ }, onPressCopy: { addresses in
+ self.onPressCopy(sendToRecipients: addresses)
+ })
}
.presentationDetents([.large])
@@ -621,6 +623,25 @@ struct AliasesView: View {
}
}
+ private func onPressCopy(sendToRecipients: String) {
+
+ // aliasToSendMailFrom will be set to nil when the EditAliasSendMailRecipientBottomSheet gets dismissed, therefore we make a copy of the item and
+ // return if both are nil
+ guard let alias = aliasToSendMailFrom ?? aliasToSendMailFromCopy else {return}
+
+ // Get recipients
+ let recipients = AnonAddyUtils.getSendAddress(recipientEmails: sendToRecipients.split(separator: ",").map { String($0) }, alias: alias)
+
+ // Copy the email addresses to clipboard
+ UIPasteboard.general.setValue(recipients.joined(separator: ";"),forPasteboardType: UTType.plainText.identifier)
+ showCopiedToClipboardAnimation()
+
+ // Set aliasToSendMailFromCopy to nil
+ aliasToSendMailFromCopy = nil
+
+ aliasToSendMailFrom = nil
+ }
+
private func activateAlias(alias: Aliases) async {
let networkHelper = NetworkHelper()
do {
diff --git a/addy/View/aliases/manage/AliasDetailView.swift b/addy/View/aliases/manage/AliasDetailView.swift
index 941f88b..1690ed7 100644
--- a/addy/View/aliases/manage/AliasDetailView.swift
+++ b/addy/View/aliases/manage/AliasDetailView.swift
@@ -375,11 +375,13 @@ struct AliasDetailView: View {
}
.sheet(isPresented: $isPresentingEditAliasSendMailRecipientBottomSheet) {
NavigationStack {
- EditAliasSendMailRecipientBottomSheet(aliasEmail: alias.email){ addresses in
+ EditAliasSendMailRecipientBottomSheet(aliasEmail: alias.email, onPressSend: { addresses in
self.onPressSend(client: nil, sendToRecipients: addresses)
isPresentingEditAliasSendMailRecipientBottomSheet = false
-
- }
+ }, onPressCopy: { addresses in
+ self.onPressCopy(sendToRecipients: addresses)
+ isPresentingEditAliasSendMailRecipientBottomSheet = false
+ })
}
.presentationDetents([.large])
}
@@ -515,9 +517,7 @@ struct AliasDetailView: View {
// Get recipients
let recipients = AnonAddyUtils.getSendAddress(recipientEmails: sendToRecipients.split(separator: ",").map { String($0) }, alias: alias)
- // Copy the email addresses to clipboard
- UIPasteboard.general.setValue(recipients.joined(separator: ";"),forPasteboardType: UTType.plainText.identifier)
- showCopiedToClipboardToast()
+ onPressCopy(sendToRecipients: sendToRecipients)
// Prepare mailto URL
let mailtoURL = client!.composeURL(to: recipients)
@@ -528,6 +528,17 @@ struct AliasDetailView: View {
}
}
+ private func onPressCopy(sendToRecipients: String) {
+ guard let alias = alias else { return }
+
+ // Get recipients
+ let recipients = AnonAddyUtils.getSendAddress(recipientEmails: sendToRecipients.split(separator: ",").map { String($0) }, alias: alias)
+
+ // Copy the email addresses to clipboard
+ UIPasteboard.general.setValue(recipients.joined(separator: ";"),forPasteboardType: UTType.plainText.identifier)
+ showCopiedToClipboardToast()
+ }
+
func getRecipients(alias: Aliases) -> String{
// Set recipients
var recipients: String = ""
diff --git a/addy/View/aliases/manage/EditAliasSendMailRecipientBottomSheet.swift b/addy/View/aliases/manage/EditAliasSendMailRecipientBottomSheet.swift
index a41ffbd..6b0cbe7 100644
--- a/addy/View/aliases/manage/EditAliasSendMailRecipientBottomSheet.swift
+++ b/addy/View/aliases/manage/EditAliasSendMailRecipientBottomSheet.swift
@@ -12,10 +12,12 @@ import AVFoundation
struct EditAliasSendMailRecipientBottomSheet: View {
@State private var aliasEmail: String
let onPressSend: (String) -> Void
+ let onPressCopy: (String) -> Void
- init(aliasEmail: String, onPressSend: @escaping (String) -> Void) {
+ init(aliasEmail: String, onPressSend: @escaping (String) -> Void, onPressCopy: @escaping (String) -> Void) {
self.aliasEmail = aliasEmail
self.onPressSend = onPressSend
+ self.onPressCopy = onPressCopy
}
@State private var addressesValidationError:String?
@@ -44,14 +46,30 @@ struct EditAliasSendMailRecipientBottomSheet: View {
Section {
- AddyButton(action: {
- // Only perform the action whent the addresses are valid
- if (addressesValidationError == nil){
- self.onPressSend(self.addresses)
+ HStack{
+ AddyButton(action: {
+ // Only perform the action whent the addresses are valid
+ if (addressesValidationError == nil){
+ self.onPressSend(self.addresses)
+ }
+ }) {
+ Text(String(localized: "send")).foregroundColor(Color.white)
}
- }) {
- Text(String(localized: "send")).foregroundColor(Color.white)
+
+ Button() {
+ // Only perform the action whent the addresses are valid
+ if (addressesValidationError == nil){
+ self.onPressCopy(self.addresses)
+ }
+ } label: {
+ Image(systemName: "clipboard.fill")
+ }
+ .buttonStyle(.bordered)
+ .controlSize(.large)
+ .buttonBorderShape(.circle)
+
}.frame(minHeight: 56)
+
}.listRowBackground(Color.clear).listRowInsets(EdgeInsets())
@@ -74,6 +92,8 @@ struct EditAliasSendMailRecipientBottomSheet: View {
#Preview {
EditAliasSendMailRecipientBottomSheet(aliasEmail: "TEST", onPressSend: { alias in
- // Dummy function for preview
+ print("SEND")
+ }, onPressCopy: { alias in
+ print("COPY")
})
}
diff --git a/altsource/altsource.json b/altsource/altsource.json
index 155a7cd..29ae2d1 100644
--- a/altsource/altsource.json
+++ b/altsource/altsource.json
@@ -27,6 +27,14 @@
"https://github.com/anonaddy/addy-ios/blob/master/altsource/screenshots/6.png?raw=true",
],
"versions": [
+ {
+ "version": "1.2.1",
+ "date": "2025-02-20T00:00:00+02:00",
+ "size": 20901930,
+ "downloadURL": "https://github.com/anonaddy/addy-ios/raw/ed7e3daa2fdf5c7a17644141386a3eae03bcca89/builds/appstorelessRelease%202025-02-20%2021-04-08/addy.ipa",
+ "localizedDescription": "Added the ability to only copy the email addresses when sending mail from the app",
+ "minOSVersion": "17.0"
+ },
{
"version": "1.2.0",
"date": "2025-02-01T00:00:00+02:00",
diff --git a/builds/appstorelessRelease 2025-02-01 15-54-48/addy.ipa b/builds/appstorelessRelease 2025-02-20 21-04-08/addy.ipa
similarity index 86%
rename from builds/appstorelessRelease 2025-02-01 15-54-48/addy.ipa
rename to builds/appstorelessRelease 2025-02-20 21-04-08/addy.ipa
index 127643c..a977dc9 100644
Binary files a/builds/appstorelessRelease 2025-02-01 15-54-48/addy.ipa and b/builds/appstorelessRelease 2025-02-20 21-04-08/addy.ipa differ