Skip to content

Commit a77d6c4

Browse files
CaiJingLongAlexV525claude
authored
feat(darwin): migrate to Swift Package Manager (#323)
- Resolves #322 - Resolves #356 - Resolves #360 - Resolves #365 --- - Replaces #338 - Replaces #359 --------- Signed-off-by: Caijinglong <cjl_spy@163.com> Co-authored-by: Alex Li <github@alexv525.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 7d4652d commit a77d6c4

86 files changed

Lines changed: 1110 additions & 92 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/runnable.yml

Lines changed: 88 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ jobs:
1414
runs-on: ${{ matrix.os }}
1515
strategy:
1616
matrix:
17-
os: [ ubuntu-latest ]
17+
os: [ubuntu-latest]
1818
steps:
1919
- uses: actions/checkout@v4
2020
- uses: actions/setup-java@v4
2121
with:
22-
distribution: 'zulu'
23-
java-version: '17'
22+
distribution: "zulu"
23+
java-version: "17"
2424
- uses: subosito/flutter-action@v2
2525
with:
26-
channel: 'stable'
26+
channel: "stable"
2727
- name: Log Dart/Flutter versions
2828
run: |
2929
dart --version
@@ -42,42 +42,113 @@ jobs:
4242
runs-on: ${{ matrix.os }}
4343
strategy:
4444
matrix:
45-
os: [ macos-latest ]
45+
os: [macos-latest]
46+
build_cmd:
47+
- melos run try_build_ios
48+
- melos run try_build_ios_swift_package_manager
4649
steps:
4750
- uses: actions/checkout@v4
4851
- uses: actions/setup-java@v4
4952
with:
50-
distribution: 'zulu'
51-
java-version: '17'
53+
distribution: "zulu"
54+
java-version: "17"
5255
- uses: subosito/flutter-action@v2
5356
with:
5457
architecture: x64
55-
channel: 'stable'
58+
channel: "stable"
5659
- run: dart --version
5760
- run: flutter --version
5861
- name: Install melos
5962
run: dart pub global activate melos
6063
- name: Melos bootstrap
6164
run: melos bootstrap
6265
- name: Build iOS debug with melos
63-
run: melos run try_build_ios
66+
run: ${{ matrix.build_cmd }}
67+
68+
integration_test_iOS:
69+
needs: analyze
70+
name: Integration test iOS (${{ matrix.spm }}) on ${{ matrix.os }}
71+
runs-on: ${{ matrix.os }}
72+
strategy:
73+
fail-fast: false
74+
matrix:
75+
os: [macos-latest]
76+
spm: [cocoapods, swift-package-manager]
77+
steps:
78+
- uses: actions/checkout@v4
79+
- uses: subosito/flutter-action@v2
80+
with:
81+
channel: "stable"
82+
- run: flutter --version
83+
- name: Install melos
84+
run: dart pub global activate melos
85+
- name: Melos bootstrap
86+
run: melos bootstrap
87+
- name: Configure Swift Package Manager
88+
run: |
89+
if [ "${{ matrix.spm }}" = "swift-package-manager" ]; then
90+
flutter config --enable-swift-package-manager
91+
else
92+
flutter config --no-enable-swift-package-manager
93+
fi
94+
- name: Boot iOS simulator
95+
run: |
96+
UDID=$(xcrun simctl list devices available | grep -E "iPhone [0-9]+ \(" | head -n 1 | grep -oE "[0-9A-F-]{36}")
97+
echo "Booting $UDID"
98+
xcrun simctl boot "$UDID"
99+
echo "DEVICE_ID=$UDID" >> $GITHUB_ENV
100+
- name: Run integration tests
101+
working-directory: packages/flutter_image_compress/example
102+
env:
103+
DEVICE_ID: ${{ env.DEVICE_ID }}
104+
run: flutter test integration_test/compress_test.dart -d "$DEVICE_ID"
105+
106+
integration_test_macOS:
107+
needs: analyze
108+
name: Integration test macOS (${{ matrix.spm }}) on ${{ matrix.os }}
109+
runs-on: ${{ matrix.os }}
110+
strategy:
111+
fail-fast: false
112+
matrix:
113+
os: [macos-latest]
114+
spm: [cocoapods, swift-package-manager]
115+
steps:
116+
- uses: actions/checkout@v4
117+
- uses: subosito/flutter-action@v2
118+
with:
119+
channel: "stable"
120+
- run: flutter --version
121+
- name: Install melos
122+
run: dart pub global activate melos
123+
- name: Melos bootstrap
124+
run: melos bootstrap
125+
- name: Configure Swift Package Manager
126+
run: |
127+
if [ "${{ matrix.spm }}" = "swift-package-manager" ]; then
128+
flutter config --enable-swift-package-manager
129+
else
130+
flutter config --no-enable-swift-package-manager
131+
fi
132+
- name: Run integration tests
133+
working-directory: packages/flutter_image_compress/example
134+
run: flutter test integration_test/compress_test.dart -d macos
64135

65136
test_android:
66137
needs: analyze
67138
name: Test Android on ${{ matrix.os }}
68139
runs-on: ${{ matrix.os }}
69140
strategy:
70141
matrix:
71-
os: [ ubuntu-latest ]
142+
os: [ubuntu-latest]
72143
steps:
73144
- uses: actions/checkout@v4
74145
- uses: actions/setup-java@v4
75146
with:
76-
distribution: 'zulu'
77-
java-version: '17'
147+
distribution: "zulu"
148+
java-version: "17"
78149
- uses: subosito/flutter-action@v2
79150
with:
80-
channel: 'stable'
151+
channel: "stable"
81152
- run: dart --version
82153
- run: flutter --version
83154
- run: flutter pub get
@@ -93,16 +164,16 @@ jobs:
93164
runs-on: ${{ matrix.os }}
94165
strategy:
95166
matrix:
96-
os: [ ubuntu-latest ]
167+
os: [ubuntu-latest]
97168
steps:
98169
- uses: actions/checkout@v4
99170
- uses: actions/setup-java@v4
100171
with:
101-
distribution: 'zulu'
102-
java-version: '17'
172+
distribution: "zulu"
173+
java-version: "17"
103174
- uses: subosito/flutter-action@v2
104175
with:
105-
channel: 'stable'
176+
channel: "stable"
106177
- run: dart --version
107178
- run: flutter --version
108179
- name: Install melos

.gitignore

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,12 @@
3939
example/macos/Flutter/ephemeral/flutter_export_environment.sh
4040

4141
pubspec_overrides.yaml
42-
pubspec.lock
42+
pubspec.lock
43+
44+
# FVM Version Cache
45+
.fvm/
46+
.fvmrc
47+
48+
# Xcode derived data — should never be tracked.
49+
DerivedData/
50+
**/DerivedData/

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,17 @@
33
All notable changes to this project will be documented in this file.
44
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
55

6+
## Unreleased
7+
8+
### Changes
9+
10+
- **FEAT**(iOS/macOS): Swift Package Manager support. `flutter_image_compress_common` and `flutter_image_compress_macos` now ship `Package.swift` alongside their podspec. Existing Cocoapods integration continues to work.
11+
- **TEST**: Add `example/integration_test/compress_test.dart` — behavior baseline covering all four API surfaces, format container assertions, EXIF preservation, EXIF orientation, transparency, and rotation.
12+
13+
Packages:
14+
- `flutter_image_compress_common` `v1.0.6``v1.1.0`
15+
- `flutter_image_compress_macos` `v1.0.3``v1.1.0`
16+
617
## 2025-01-02
718

819
### Changes

melos.yaml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ scripts:
2323
try_build_ios:
2424
exec: |
2525
set -e
26+
flutter config --no-enable-swift-package-manager
27+
flutter pub get
28+
flutter build ios --debug --no-codesign
29+
packageFilters:
30+
fileExists: lib/main.dart
31+
try_build_ios_swift_package_manager:
32+
exec: |
33+
set -e
34+
flutter config --enable-swift-package-manager
2635
flutter pub get
2736
flutter build ios --debug --no-codesign
2837
packageFilters:
@@ -41,6 +50,31 @@ scripts:
4150
flutter build macos
4251
packageFilters:
4352
fileExists: lib/main.dart
53+
verify_ios_behavior:
54+
description: |
55+
Run the integration_test behavior baseline on an iOS device/simulator.
56+
Requires a booted iOS simulator or connected device. Pass DEVICE_ID via
57+
env to target a specific one; otherwise Flutter picks the first iOS
58+
device.
59+
exec: |
60+
set -e
61+
flutter pub get
62+
if [ -n "$DEVICE_ID" ]; then
63+
flutter test integration_test/compress_test.dart -d "$DEVICE_ID"
64+
else
65+
flutter test integration_test/compress_test.dart
66+
fi
67+
packageFilters:
68+
fileExists: integration_test/compress_test.dart
69+
verify_macos_behavior:
70+
description: |
71+
Run the integration_test behavior baseline on macOS desktop.
72+
exec: |
73+
set -e
74+
flutter pub get
75+
flutter test integration_test/compress_test.dart -d macos
76+
packageFilters:
77+
fileExists: integration_test/compress_test.dart
4478
cp_files:
4579
exec: |
4680
set -e

packages/flutter_image_compress/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
.buildlog/
99
.history
1010
.svn/
11+
build/
1112

1213
# IntelliJ related
1314
*.iml

packages/flutter_image_compress/example/.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,8 @@ build/
7474
!**/ios/**/default.perspectivev3
7575
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
7676
*.lock
77+
78+
!pubspec.lock
79+
80+
# FVM Version Cache
81+
.fvm/

0 commit comments

Comments
 (0)