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 - -[![AirSync demo](https://img.youtube.com/vi/HDv0Hu9z294?si=dgycryP1T8QvPJYa/0.jpg)](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.

- + +

+[![AirSync demo](https://img.youtube.com/vi/HDv0Hu9z294?si=dgycryP1T8QvPJYa/0.jpg)](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 - +