Skip to content

Commit 550c1bc

Browse files
authored
Unify Showcase and ShowcaseFuse into a single project (#100)
* Unify Showcase and ShowcaseFuse into a single project * Run two workflows for building in Lite and Fuse modes * Update dependency layout * Fix SkipSQL import * Update SQLPlayground and fastlane metadata * Rename SKIP_FUSE_MODE to SKIP_MODE_FUSE and continue unifying playgrounds * Re-enable BlendModePlayground and ListPlayground * Re-enable more playgrounds * Update app metadata [skip ci] * Remove unused screenshot [skip ci] * Restore more Showcase playgrounds * Add back LabeledContentPlayground
1 parent c42b1dc commit 550c1bc

128 files changed

Lines changed: 3908 additions & 1062 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.
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
name: skipapp-showcase
1+
name: skipapp-showcase-fuse
22
on:
33
push:
44
branches: [ main ]
55
tags: "[0-9]+.[0-9]+.[0-9]+"
66
schedule:
7-
- cron: '30 16 * * *'
7+
- cron: '30 2,6,10,14,18,22 * * *'
88
workflow_dispatch:
99
pull_request:
1010

@@ -16,6 +16,8 @@ permissions:
1616
jobs:
1717
call-workflow:
1818
uses: skiptools/actions/.github/workflows/skip-app.yml@v1
19+
with:
20+
env: SKIP_MODE=fuse
1921
secrets:
2022
# These optional secrets enable the Android app to be signed
2123
KEYSTORE_JKS: ${{ secrets.KEYSTORE_JKS }}
@@ -28,4 +30,3 @@ jobs:
2830
APPLE_MOBILEPROVISION: ${{ secrets.APPLE_MOBILEPROVISION }}
2931
# This secret enables the iOS app to be uploaded to the App Store
3032
APPLE_APPSTORE_APIKEY: ${{ secrets.APPLE_APPSTORE_APIKEY }}
31-
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: skipapp-showcase-lite
2+
on:
3+
push:
4+
branches: [ main ]
5+
tags: "[0-9]+.[0-9]+.[0-9]+"
6+
schedule:
7+
- cron: '30 0,4,8,12,16,20 * * *'
8+
workflow_dispatch:
9+
pull_request:
10+
11+
permissions:
12+
contents: write
13+
id-token: write
14+
attestations: write
15+
16+
jobs:
17+
call-workflow:
18+
uses: skiptools/actions/.github/workflows/skip-app.yml@v1
19+
with:
20+
env: SKIP_MODE=lite

Android/app/build.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ android {
3333
// versionName = MARKETING_VERSION
3434
}
3535

36+
// Needed when packaging the Swift runtime .so files in Skip Fuse mode;
37+
// harmless in Skip Lite mode.
38+
packaging {
39+
jniLibs {
40+
keepDebugSymbols.add("**/*.so")
41+
pickFirsts.add("**/*.so")
42+
}
43+
}
44+
3645
buildFeatures {
3746
buildConfig = true
3847
}

Android/app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
</queries>
3434

3535
<application
36-
android:label="${PRODUCT_NAME}"
36+
android:label="Skip Showcase"
3737
android:name=".AndroidAppMain"
3838
android:allowBackup="true"
3939
android:supportsRtl="true"
@@ -68,7 +68,7 @@
6868
<action android:name="android.intent.action.VIEW" />
6969
<category android:name="android.intent.category.DEFAULT" />
7070
<category android:name="android.intent.category.BROWSABLE" />
71-
<data android:scheme="org.appfair.app.showcaselite" android:host="auth" />
71+
<data android:scheme="org.appfair.app.showcase" android:host="auth" />
7272
</intent-filter>
7373
</activity>
7474

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,27 @@
1-
This app demonstrates the output of the Skip transpiler, which takes an iOS SwiftUI app and converts into an Android Jetpack Compose app.
1+
Skip Showcase is a comprehensive, interactive catalog of user interface components built with Skip, the cross-platform development tool that lets you write one app in Swift and SwiftUI and run it natively on both iOS and Android.
22

3-
This application shows the various components that are generated from the SwiftUI transpilation.
3+
This app is written entirely in Swift and SwiftUI. On iOS, it runs as a standard native SwiftUI app. On Android, the same Swift code is compiled natively using the official Swift SDK for Android, and Skip's SkipUI framework translates SwiftUI views into Jetpack Compose, producing a genuinely native Android experience.
4+
5+
Skip Showcase is the ideal way to compare how SwiftUI components look and behave across both platforms. Every screen in the app is the same Swift source code running on both iOS and Android, so you can see exactly how Skip maps SwiftUI to native Android controls.
6+
7+
The app covers a wide range of SwiftUI features, including:
8+
9+
UI Controls: Button, Toggle, Slider, Stepper, Picker, DatePicker, TextField, SecureField, TextEditor, Menu, and more.
10+
11+
Layout: Stack views (HStack, VStack, ZStack), Grid, Form, List, ScrollView, Spacer, GeometryReader, ViewThatFits, SafeArea, and Frame.
12+
13+
Navigation: NavigationStack, TabView, Sheet, ConfirmationDialog, Alert, Toolbar, DisclosureGroup, and Link.
14+
15+
Graphics and Effects: Shape, Gradient, Shadow, Blur, BlendMode, Mask, Overlay, Border, Animation, Transition, Transform, and Color effects.
16+
17+
Data and State: @State, @Observable, @Environment, Preference keys, FocusState, ScenePhase, Storage, Timer, and Notification.
18+
19+
Text and Media: Text styling, SF Symbols, Image, VideoPlayer, Lottie animations, and Localization.
20+
21+
Platform Integration: Haptic feedback, Keyboard handling, Pasteboard, ShareLink, Searchable, WebView, Map, SQL database, Keychain, Document picker, and Web authentication.
22+
23+
Custom Compose: Demonstrates how to embed custom Jetpack Compose views directly within SwiftUI code using Skip's ComposeView bridging.
24+
25+
Skip Showcase is open source. Browse the source code at https://github.com/skiptools/skipapp-showcase-fuse to see how each component is implemented.
26+
27+
Learn more about Skip at https://skip.dev
126 KB
Loading
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
A catalog of widgets for Skip apps
1+
Interactive SwiftUI component catalog for iOS and Android, built with Skip

Darwin/Showcase.xcconfig

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ MACOSX_DEPLOYMENT_TARGET = 14.0
3434
SUPPORTS_MACCATALYST = NO
3535

3636
// iPhone + iPad
37-
// TARGETED_DEVICE_FAMILY = 1,2
37+
TARGETED_DEVICE_FAMILY = 1,2
3838

3939
// iPhone only
4040
TARGETED_DEVICE_FAMILY = 1
@@ -60,9 +60,12 @@ CODE_SIGN_ENTITLEMENTS = Entitlements.plist
6060

6161
PRODUCT_BUNDLE_IDENTIFIER[config=Release] = org.appfair.app.Showcase
6262

63-
DEVELOPMENT_TEAM[config=Release] = 25KG25YA3R
64-
CODE_SIGN_IDENTITY[config=Release] = Apple Distribution: The App Fair Project Inc (25KG25YA3R)
65-
CODE_SIGN_STYLE[config=Release] = Manual
66-
PROVISIONING_PROFILE_SPECIFIER[config=Release] = org.appfair.app.Showcase
63+
DEVELOPMENT_TEAM = 25KG25YA3R
64+
65+
CODE_SIGN_IDENTITY[config=Debug] = Apple Development
66+
CODE_SIGN_IDENTITY[config=Release] = Apple Distribution
6767

68+
CODE_SIGN_STYLE[config=Debug] = Automatic
69+
CODE_SIGN_STYLE[config=Release] = Manual
6870

71+
PROVISIONING_PROFILE_SPECIFIER[config=Release] = org.appfair.app.Showcase AppStore

Darwin/Showcase.xcodeproj/project.pbxproj

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
/* Begin PBXBuildFile section */
1010
490010192BACD83F0000DE33 /* protest_guerrilla.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 490010182BACD83F0000DE33 /* protest_guerrilla.ttf */; };
11-
49231BAC2AC5BCEF00F98ADF /* ShowcaseApp in Frameworks */ = {isa = PBXBuildFile; productRef = 49231BAB2AC5BCEF00F98ADF /* ShowcaseApp */; };
12-
49231BAD2AC5BCEF00F98ADF /* ShowcaseApp in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 49231BAB2AC5BCEF00F98ADF /* ShowcaseApp */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
11+
49231BAC2AC5BCEF00F98ADF /* Showcase in Frameworks */ = {isa = PBXBuildFile; productRef = 49231BAB2AC5BCEF00F98ADF /* Showcase */; };
12+
49231BAD2AC5BCEF00F98ADF /* Showcase in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 49231BAB2AC5BCEF00F98ADF /* Showcase */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
1313
499CD43B2AC5B799001AE8D8 /* Main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49F90C2B2A52156200F06D93 /* Main.swift */; };
1414
499CD4402AC5B799001AE8D8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 49F90C2F2A52156300F06D93 /* Assets.xcassets */; };
1515
49DAAD422D2F51F60086DB92 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 49DAAD412D2F51F60086DB92 /* Localizable.xcstrings */; };
@@ -22,7 +22,7 @@
2222
dstPath = "";
2323
dstSubfolderSpec = 10;
2424
files = (
25-
49231BAD2AC5BCEF00F98ADF /* ShowcaseApp in Embed Frameworks */,
25+
49231BAD2AC5BCEF00F98ADF /* Showcase in Embed Frameworks */,
2626
);
2727
name = "Embed Frameworks";
2828
runOnlyForDeploymentPostprocessing = 0;
@@ -49,7 +49,7 @@
4949
isa = PBXFrameworksBuildPhase;
5050
buildActionMask = 2147483647;
5151
files = (
52-
49231BAC2AC5BCEF00F98ADF /* ShowcaseApp in Frameworks */,
52+
49231BAC2AC5BCEF00F98ADF /* Showcase in Frameworks */,
5353
);
5454
runOnlyForDeploymentPostprocessing = 0;
5555
};
@@ -117,7 +117,7 @@
117117
);
118118
name = Showcase;
119119
packageProductDependencies = (
120-
49231BAB2AC5BCEF00F98ADF /* ShowcaseApp */,
120+
49231BAB2AC5BCEF00F98ADF /* Showcase */,
121121
);
122122
productName = App;
123123
productReference = 490A40BF2B37A3C300275405 /* Showcase.app */;
@@ -288,9 +288,9 @@
288288
/* End XCConfigurationList section */
289289

290290
/* Begin XCSwiftPackageProductDependency section */
291-
49231BAB2AC5BCEF00F98ADF /* ShowcaseApp */ = {
291+
49231BAB2AC5BCEF00F98ADF /* Showcase */ = {
292292
isa = XCSwiftPackageProductDependency;
293-
productName = ShowcaseApp;
293+
productName = Showcase;
294294
};
295295
/* End XCSwiftPackageProductDependency section */
296296
};
Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,19 @@
1-
The Skip Showcase app is a tour of the of the user interface of a dual-platform app built with Skip technology.
1+
Skip Showcase is a comprehensive, interactive catalog of user interface components built with Skip, the cross-platform development tool that lets you write one app in Swift and SwiftUI and run it natively on all mobile platforms.
2+
3+
This app is written entirely in Swift and SwiftUI. On iOS, it runs as a standard native SwiftUI app. On other platforms, the same Swift code is compiled natively using the official Swift SDK for other platforms, and Skip's SkipUI framework translates SwiftUI views into Jetpack Compose, producing a genuinely native experience.
4+
5+
Skip Showcase is the ideal way to compare how SwiftUI components look and behave across both platforms. Install the app on both devices to see exactly how Skip maps SwiftUI to native controls elsewhere, using the same Swift source code on both platforms.
6+
7+
The app covers a wide range of SwiftUI features, including:
8+
9+
- UI Controls: Button, Toggle, Slider, Stepper, Picker, DatePicker, TextField, SecureField, TextEditor, Menu, and more
10+
- Layout: Stacks, Grid, Form, List, ScrollView, GeometryReader, ViewThatFits, SafeArea, and Frame
11+
- Navigation: NavigationStack, TabView, Sheet, ConfirmationDialog, Alert, Toolbar, and Link
12+
- Graphics: Shape, Gradient, Shadow, Blur, BlendMode, Mask, Animation, Transition, and Color effects
13+
- State Management: @State, @Observable, @Environment, Preference keys, FocusState, and Timer
14+
- Text and Media: Text styling, SF Symbols, Image, VideoPlayer, Lottie animations, and Localization
15+
- Platform Integration: Haptic feedback, Pasteboard, ShareLink, Searchable, WebView, Map, SQL, and Keychain
16+
17+
Skip Showcase is open source. Browse the source code at https://github.com/skiptools/skipapp-showcase-fuse to see how each component is implemented.
18+
19+
Learn more about Skip at https://skip.dev

0 commit comments

Comments
 (0)