diff --git a/AirSync.xcodeproj/project.pbxproj b/AirSync.xcodeproj/project.pbxproj
index e540023b..e8797067 100644
--- a/AirSync.xcodeproj/project.pbxproj
+++ b/AirSync.xcodeproj/project.pbxproj
@@ -293,7 +293,7 @@
CODE_SIGN_ENTITLEMENTS = "";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 8;
+ CURRENT_PROJECT_VERSION = 10;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = WCB4HTANA6;
ENABLE_APP_SANDBOX = NO;
@@ -311,7 +311,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 14.6;
- MARKETING_VERSION = 2.0.33;
+ MARKETING_VERSION = 2.1.0;
PRODUCT_BUNDLE_IDENTIFIER = "sameerasw.airsync-mac";
PRODUCT_NAME = "$(TARGET_NAME)";
REGISTER_APP_GROUPS = YES;
@@ -339,7 +339,7 @@
CODE_SIGN_ENTITLEMENTS = "";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 8;
+ CURRENT_PROJECT_VERSION = 10;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = WCB4HTANA6;
ENABLE_APP_SANDBOX = NO;
@@ -357,7 +357,7 @@
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 14.6;
- MARKETING_VERSION = 2.0.33;
+ MARKETING_VERSION = 2.1.0;
PRODUCT_BUNDLE_IDENTIFIER = "sameerasw.airsync-mac";
PRODUCT_NAME = "$(TARGET_NAME)";
REGISTER_APP_GROUPS = YES;
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 9b904077..42e919d5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -19,6 +19,36 @@ This ensures that the project remains open for personal use but protected agains
- Respect project structure and coding standards.
- If you're submitting a new feature, consider opening an issue to discuss it first.
+## Adding New Icons
+
+### 1. Add Image Assets
+1. Add your new icon images to `Assets.xcassets/AppIcons/`
+2. Create both an `.imageset` (for UI display) and optionally an `.appiconset` (for actual app icons)
+3. Follow the naming convention: `AppIconImage-[variant]`
+
+### 2. Define the Icon
+Add to `AppIconExtensions.swift`:
+
+```swift
+static let newIcon = AppIcon(
+ name: "Display Name",
+ description: "Optional description",
+ imageName: "AppIconImage-variant", // Asset name
+ iconName: "AppIconImage-variant" // NSImage name
+)
+```
+
+### 3. Register the Icon
+Add to the `allIcons` array:
+
+```swift
+static let allIcons: [AppIcon] = [
+ .defaultIcon,
+ .pixelIcon,
+ .newIcon // Add here
+]
+```
+
## Contact
For questions about contributions or licensing, contact: sameerasw.com@gmail.com
diff --git a/README.md b/README.md
index 559d53d1..1891bb92 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,23 @@
-# AirSync 2.0 macOS app written in Swift
+ # AirSync macOS app source code
-Min : macOS 14.5
-
-[](https://www.youtube.com/watch?v=HDv0Hu9z294?si=dgycryP1T8QvPJYa)
-
-### During beta testing, You can use the code `i-am-a-tester` to try out and test AirSync+ features. Also these + features are subject to change and currently they are limited because to test if the workflow works.
-
-## [Help translating AirSync to your language on crowdin!](https://crwd.in/airsync/612ea64319db322fa1ed070574109c242534446)
+> During beta testing, You can use the code `i-am-a-tester` to try out and test AirSync+ features. Also these + features are subject to change and currently they are limited because to test if the workflow works.
-
+
+
+[](https://www.youtube.com/watch?v=HDv0Hu9z294?si=dgycryP1T8QvPJYa) | [Read Documentation and How-To](https://airsync.notion.site/) | [Help translating AirSync to your language on crowdin!](https://crwd.in/airsync/612ea64319db322fa1ed070574109c242534446)
+
-
+
-## [Read Documentation and How-To](https://airsync.notion.site/)
+## Requirements
+- Min : macOS 14.5
+- Opt: scrcpy, adb & media-control brew installs
## Contributors <3
@@ -38,8 +37,9 @@ Min : macOS 14.5
- To you, seriously… <3
-### Libraries used
+## Libraries used
- [dagronf/QRCode](https://github.com/dagronf/QRCode)
- [httpswift/swifter](https://github.com/httpswift/swifter)
- [sparkle-project/Sparkle](https://github.com/sparkle-project/Sparkle)
+- [ungive/media-control](https://github.com/ungive/media-control)
diff --git a/airsync-mac/Core/Util/Gumroad.swift b/airsync-mac/Core/Util/Gumroad.swift
index ec735d96..ab4e4079 100644
--- a/airsync-mac/Core/Util/Gumroad.swift
+++ b/airsync-mac/Core/Util/Gumroad.swift
@@ -18,30 +18,6 @@ class Gumroad {
let appState = AppState.shared
func checkLicenseKeyValidity(key: String, save: Bool, isNewRegistration: Bool) async throws -> Bool {
- // Tester shortcut (kept)
- if key == "i-am-a-tester" {
- if save {
- AppState.shared.setPlusTemporarily(true)
- AppState.shared.licenseDetails = LicenseDetails(
- key: key,
- email: "tester@example.com",
- productName: "Test Mode",
- orderNumber: 0,
- purchaserID: "tester",
- usesCount: 0,
- price: 0,
- currency: "usd",
- saleTimestamp: "",
- subscriptionCancelledAt: nil,
- subscriptionEndedAt: nil,
- subscriptionFailedAt: nil,
- refunded: false,
- disputed: false,
- chargebacked: false
- )
- }
- return true
- }
// Select product id based on chosen plan
let selectedPlan = UserDefaults.standard.licensePlanType
diff --git a/airsync-mac/Info.plist b/airsync-mac/Info.plist
index c9bd1613..cb6bfcb1 100644
--- a/airsync-mac/Info.plist
+++ b/airsync-mac/Info.plist
@@ -25,7 +25,7 @@
ForceUpdateKey
- 001
+ 002
SUEnableDownloaderService
SUEnableInstallerLauncherService
diff --git a/airsync-mac/Localization/ja.json b/airsync-mac/Localization/ja.json
index 1bb9e37c..ad5233f1 100644
--- a/airsync-mac/Localization/ja.json
+++ b/airsync-mac/Localization/ja.json
@@ -15,7 +15,7 @@
"apps.tab": "アプリ",
"transfers.tab": "ファイル転送",
"settings.tab": "設定",
- "qr.tab": "Scan QR",
+ "qr.tab": "QRコードをスキャン",
"transfers.empty": "何も転送されていません",
"plus.title": "AirSync+",
"plus.why": "どうしてPlus?",
diff --git a/airsync.build.config b/airsync.build.config
new file mode 100644
index 00000000..19ca9b1c
--- /dev/null
+++ b/airsync.build.config
@@ -0,0 +1,32 @@
+# AirSync Build Configuration
+# Lines starting with # are comments and will be ignored
+
+# === PROJECT CONFIGURATION ===
+project_name=AirSync
+project_dir=/Users/sameerasandakelum/GIT/airsync-mac
+output_dir=/Users/sameerasandakelum/GIT/airsync-mac/updates
+skip_confirmation=false
+
+# Define the build steps (comma-separated)
+steps=Cleanup updates directory,Build DMG,Notarize DMG,Staple & Validate DMG,Generate Sparkle Appcast
+
+# === PROJECT-SPECIFIC VARIABLES ===
+updates_dir=/Users/sameerasandakelum/GIT/airsync-mac/updates
+dmg_name=AirSync.dmg
+background_image=/Users/sameerasandakelum/GIT/airsync-mac/airsync-bg.jpg
+developer_id=Developer ID Application: Sameera Sandakelum (WCB4HTANA6)
+team_id=WCB4HTANA6
+
+# === KEYCHAIN REFERENCES ===
+# These will be retrieved from keychain automatically
+apple_id_keychain_service=AirSyncDevEmail
+app_password_keychain_service=AirSyncAppPassword
+
+# === SPARKLE CONFIGURATION ===
+# The script will auto-detect Sparkle directory, but you can override it here
+# sparkle_dir=/path/to/sparkle/directory
+
+# === DMG CONFIGURATION ===
+dmg_window_size=600,400
+dmg_icon_size=128
+dmg_text_size=16
\ No newline at end of file
diff --git a/appcast.xml b/appcast.xml
index 2924e4ec..9dad7e09 100644
--- a/appcast.xml
+++ b/appcast.xml
@@ -3,12 +3,12 @@
AirSync
-
- 2.0.30
- Sat, 13 Sep 2025 23:27:04 +0530
- 6
- 2.0.30
+ 2.0.33
+ Tue, 23 Sep 2025 18:08:30 +0530
+ 8
+ 2.0.33
14.6
-
+