Skip to content

Commit 6833eca

Browse files
committed
Remove references to skipapp-showcase-fuse and redirect to skipapp-showcase
1 parent 3cde238 commit 6833eca

15 files changed

Lines changed: 372 additions & 405 deletions

File tree

‎astro.config.mjs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ import { coreFrameworks, platformFrameworks, integrationFrameworks, sampleApps }
1616
export default defineConfig({
1717
site: 'https://skip.dev',
1818
//trailingSlash: 'always', // aspirational
19+
redirects: {
20+
'/docs/samples/skipapp-showcase-fuse': '/docs/samples/skipapp-showcase',
21+
},
1922
markdown: {
2023
remarkPlugins: [remarkHeadingId],
2124
rehypePlugins: [[rehypeExternalLinks, {

‎scripts/sync-modules.js‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ async function processRepositories() {
6161

6262
content = content.replace(/\]\(https:\/\/source\.skip\.dev\/(skipapp-[^\/]+)[\/]?\)/g, "](/docs/samples/$1)");
6363

64+
// skipapp-showcase-fuse has been consolidated into skipapp-showcase; redirect site paths to the canonical one
65+
content = content.replaceAll('/docs/samples/skipapp-showcase-fuse', '/docs/samples/skipapp-showcase');
66+
6467
// trim everything after the repo license
6568
content = content.replace(/## License[\s\S]*/i, '');
6669

‎skip-repositories.js‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ export const integrationFrameworks = [
4646
];
4747

4848
export const sampleApps = [
49-
{ repo: 'skipapp-showcase-fuse', name: 'Showcase (Fuse)' },
50-
{ repo: 'skipapp-showcase', name: 'Showcase (Lite)' },
49+
{ repo: 'skipapp-showcase', name: 'Showcase' },
5150
{ repo: 'skipapp-hello', name: 'Hello Skip (Lite)' },
5251
{ repo: 'skipapp-howdy', name: 'Howdy Skip (Fuse)' },
5352
{ repo: 'skipapp-ahoy', name: 'Ahoy Skipper (Split Fuse)' },

‎src/content/docs/blog/fully-native-android-swift-apps.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ On Android, however, the `SkipFuseUI` module bridges the SwiftUI API onto [Jetpa
7070

7171
![Diagram of Skip's Swift-on-Android build process](https://assets.skip.dev/diagrams/skip-diagrams-skip-fuse-ui-bridge.svg)
7272

73-
Consult the `SkipUI` module's [documentation](/docs/modules/skip-ui/#supported-swiftui) for a listing of currently-supported SwiftUI constructs on Android. You can also examine the [ShowcaseFuse](https://github.com/skiptools/skipapp-showcase-fuse/tree/main/Sources/ShowcaseFuse) cross-platform sample app, which displays and exercises most supported SwiftUI components:
73+
Consult the `SkipUI` module's [documentation](/docs/modules/skip-ui/#supported-swiftui) for a listing of currently-supported SwiftUI constructs on Android. You can also examine the [Showcase](https://github.com/skiptools/skipapp-showcase) cross-platform sample app, which displays and exercises most supported SwiftUI components:
7474

7575
<div class="centered">
7676
<img src="https://assets.skip.dev/videos/showcase.gif" alt="Screen recording" style="max-width: 600px"/>
@@ -157,7 +157,7 @@ Skip's unique ability to directly call both Swift and Kotlin/Java APIs separates
157157

158158
### Skip Showcase
159159

160-
As a demonstration and validation of this technology, we have published one of our sample apps, [Skip Showcase](https://github.com/skiptools/skipapp-showcase-fuse), to both the Google Play Store and Apple App Store. This fully native Swift app demonstrates parity between SwiftUI components on iOS and Android.
160+
As a demonstration and validation of this technology, we have published one of our sample apps, [Skip Showcase](https://github.com/skiptools/skipapp-showcase), to both the Google Play Store and Apple App Store. This fully native Swift app demonstrates parity between SwiftUI components on iOS and Android.
161161

162162
<div align="center">
163163
<a href="https://play.google.com/store/apps/details?id=org.appfair.app.Showcase" style="display: inline-block;"><img src="https://appfair.org/assets/badges/google-play-store.svg" alt="Download on the Google Play Store" style="height: 60px; vertical-align: middle; object-fit: contain;"></a>

‎src/content/docs/blog/official-swift-sdk-for-android.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ As mentioned, Skip is currently using our own preview release build of this SDK
3737

3838
Note that this SDK is not just theoretical, but is in active use _today_ in many Skip-powered applications. Our own Skip Showcase[^showcase] app has been running using this SDK, and provides a comprehensive sample of what is possible when you combine native Swift with Skip's SwiftUI implementation for Android.
3939

40-
[^showcase]: Skip Showcase [/docs/samples/skipapp-showcase-fuse/](/docs/samples/skipapp-showcase-fuse/)
40+
[^showcase]: Skip Showcase [/docs/samples/skipapp-showcase/](/docs/samples/skipapp-showcase/)
4141

4242
## The Future for Swift on Android
4343

‎src/content/docs/blog/skip-block-blast.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ draft: false
1010

1111
Easter Eggs in software are hidden delights, small features that are orthogonal to the core purpose of the product but which spark a little surprise and joy. Before they lost their collective senses of humor and whimsey, big tech companies routinely[^easteregg] included easter eggs in their products, such as a flight simulator in a spreadsheet or a pinball game in a word processor.
1212

13-
Just in time for Easter, the [Skip Showcase](/docs/samples/skipapp-showcase-fuse/) app has released version 2.3.6 to both the [Apple App Store](https://apps.apple.com/us/app/skip-showcase/id6474885022) and [Google Play Store](https://play.google.com/store/apps/details?id=org.appfair.app.Showcase). This version contains a hidden gem: a completely native Swift and SwiftUI "Block Blast" style puzzle game.
13+
Just in time for Easter, the [Skip Showcase](/docs/samples/skipapp-showcase/) app has released version 2.3.6 to both the [Apple App Store](https://apps.apple.com/us/app/skip-showcase/id6474885022) and [Google Play Store](https://play.google.com/store/apps/details?id=org.appfair.app.Showcase). This version contains a hidden gem: a completely native Swift and SwiftUI "Block Blast" style puzzle game.
1414

1515
<div align="center" style="margin: 0 auto; justify-content: center; box-sizing: border-box; display: flex; gap: 8px; align-items: center;">
1616
<img alt="Screenshot of Block Blast on iPhone" src="https://assets.skip.dev/posts/blockblast/skip_block_blast_iphone.png" style="height: 400px;" />
@@ -27,7 +27,7 @@ Easter eggs were historically activated via some secret gesture and sequence of
2727

2828
Cross-platform gaming has historically been the provenance of specialized SDKs such a Godot[^godot], Unity[^unity], or Unreal[^unreal]. However, for casual games like board or puzzle games, these full-fledged engines can be overkill: you can just build it yourself with the view and gesture primitives that SwiftUI provides.
2929

30-
Our implementation of the Block Blast game is done in under 1,000 lines of pure Swift: see [GamePlayground.swift](https://github.com/skiptools/skipapp-showcase-fuse/blob/main/Sources/ShowcaseFuse/GamePlayground.swift) for the whole thing. This code works out of the box on iOS, and on Android it builds with the newly-released Swift SDK for Android[^ss4a], using Skip Fuse to translate the SwiftUI into [SkipUI's](/docs/modules/skip-ui) Jetpack Compose on Android and handle all the details of packaging and running the app. Shapes, gestures, haptic feedback, high score persistence, and everything: all done in straightforward declarative SwiftUI, exactly the same on Android as it is on iOS.
30+
Our implementation of the Block Blast game is done in under 1,000 lines of pure Swift: see [GamePlayground.swift](https://github.com/skiptools/skipapp-showcase/blob/main/Sources/ShowcaseFuse/GamePlayground.swift) for the whole thing. This code works out of the box on iOS, and on Android it builds with the newly-released Swift SDK for Android[^ss4a], using Skip Fuse to translate the SwiftUI into [SkipUI's](/docs/modules/skip-ui) Jetpack Compose on Android and handle all the details of packaging and running the app. Shapes, gestures, haptic feedback, high score persistence, and everything: all done in straightforward declarative SwiftUI, exactly the same on Android as it is on iOS.
3131

3232
Now, do we think that the next Grand Theft Auto ought be written in SwiftUI? Probably not. But for a large segment of casual games and game-like experiences, Xcode and SwiftUI may be all that you need. And augmenting your project with Skip will enable you to bring it to Android and [triple the market reach](/docs/) of your app!
3333

‎src/content/docs/blog/swift-6.3-android-support.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ This is not a small thing. It removes the single largest concern we have heard f
3939

4040
### Skip Fuse on the official SDK
4141

42-
We have already transitioned Skip's native Fuse mode to the final 6.3 SDK, and the [Skip Showcase](https://github.com/skiptools/skipapp-showcase-fuse) app built on this toolchain has been published to both the Google Play Store and the Apple App Store.
42+
We have already transitioned Skip's native Fuse mode to the final 6.3 SDK, and the [Skip Showcase](https://github.com/skiptools/skipapp-showcase) app built on this toolchain has been published to both the Google Play Store and the Apple App Store.
4343

4444
<div align="center">
4545
<a href="https://assets.skip.dev/screens/swift-sdk-for-android-in-action-showcase.png" target="_blank"><img alt="Screenshot of Skip Showcase native app" src="https://assets.skip.dev/screens/swift-sdk-for-android-in-action-showcase.png" style="width: 100%; max-width: 1200px;" /></a>

‎src/content/docs/docs/contributing.md‎

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Skip welcomes community contributions in all forms. There are many ways to contr
1212

1313
## Local Skip Libraries {#local-libraries}
1414

15-
If you'd like to make local changes to Skip's libraries while working on an app - such as by improving [SkipUI](/docs/modules/skip-ui/) or [SkipFuseUI](/docs/modules/skip-fuse-ui/) and exercising your changes with its [ShowcaseFuse app](/docs/samples/skipapp-showcase-fuse/) - you will want to configure Xcode to use local library versions rather than the current Skip distributions. This is easily accomplished with an Xcode Workspace.
15+
If you'd like to make local changes to Skip's libraries while working on an app - such as by improving [SkipUI](/docs/modules/skip-ui/) or [SkipFuseUI](/docs/modules/skip-fuse-ui/) and exercising your changes with its [Showcase app](/docs/samples/skipapp-showcase/) - you will want to configure Xcode to use local library versions rather than the current Skip distributions. This is easily accomplished with an Xcode Workspace.
1616

1717
1. Clone the [repositories](https://github.com/skiptools) you'd like to work on. We find it most convenient to make the clone directory a peer of your app directory.
1818

@@ -62,20 +62,19 @@ Most contributions to the libraries, whether they are [Core Frameworks](/docs/mo
6262

6363
Some improvements to `SkipUI`, such as fixing bugs with Compose implementations, can be done in just the [`skip-ui`](https://github.com/skiptools/skip-ui) repository. But if the improvement involves additional API that is being made available or any other changes to the `SwiftUI` surface, and PRs will need to be paired with a PR against the [`skip-fuse-ui`](https://github.com/skiptools/skip-fuse-ui) repository.
6464

65-
In addition, when adding new features or otherwise changing behavior, it is always good to test it out in the Showcase apps, both the [`skipapp-showcase`](https://github.com/skiptools/skipapp-showcase) Skip Lite app and the equivalent [`skipapp-showcase-fuse`](https://github.com/skiptools/skipapp-showcase-fuse) app. This both serves as a way to test out your new feature, ensure that it doesn't break anything else, and provide a demonstration for other developers of how your improvement works.
65+
In addition, when adding new features or otherwise changing behavior, it is always good to test it out in the [`skipapp-showcase`](https://github.com/skiptools/skipapp-showcase) app, which can run in either Skip Lite or Skip Fuse mode. This both serves as a way to test out your new feature, ensure that it doesn't break anything else, and provide a demonstration for other developers of how your improvement works.
6666

6767
So a sample workflow making a contribution would look like this:
6868

6969
1. Fork SkipUI: [https://github.com/skiptools/skip-ui/fork](https://github.com/skiptools/skip-ui/fork)
7070
2. Fork SkipFuseUI: [https://github.com/skiptools/skip-fuse-ui/fork](https://github.com/skiptools/skip-fuse-ui/fork)
71-
3. Fork Showcase Lite: [https://github.com/skiptools/skipapp-showcase/fork](https://github.com/skiptools/skipapp-showcase/fork)
72-
4. Fork Showcase Fuse: [https://github.com/skiptools/skipapp-showcase-fuse/fork](https://github.com/skiptools/skipapp-showcase-fuse/fork)
73-
5. Clone each of the forked repositories to a local folder
74-
6. Create an Xcode workspace that incorporates both the `skip-ui` and `skip-fuse-ui` packages as well as the `skipapp-showcase/Darwin/Showcase.xcodeproj` and `skipapp-showcase-fuse/Darwin/ShowcaseFuse.xcodeproj` projects
75-
7. Run each of the `ShowcaseLite App` and `ShowcaseFuse App` targets to ensure they work
76-
8. Start implementing changes to `SkipUI`, testing them out by launching the `ShowcaseLite App` target
77-
9. When you are happy with the changes, begin implementing the equivalent functionality in the `SkipFuseUI` module, and test those out by launching the `ShowcaseFuse App` target
78-
10. When everything is working, push your changes to your local forks and submit 4 separate PRs to each of the upstream repositories.
71+
3. Fork Showcase: [https://github.com/skiptools/skipapp-showcase/fork](https://github.com/skiptools/skipapp-showcase/fork)
72+
4. Clone each of the forked repositories to a local folder
73+
5. Create an Xcode workspace that incorporates both the `skip-ui` and `skip-fuse-ui` packages as well as the `skipapp-showcase/Darwin/Showcase.xcodeproj` project
74+
6. Run both the `ShowcaseLite App` and `ShowcaseFuse App` targets to ensure they work
75+
7. Start implementing changes to `SkipUI`, testing them out by launching the `ShowcaseLite App` target
76+
8. When you are happy with the changes, begin implementing the equivalent functionality in the `SkipFuseUI` module, and test those out by launching the `ShowcaseFuse App` target
77+
9. When everything is working, push your changes to your local forks and submit PRs to each of the upstream repositories.
7978

8079
:::note
8180
If the PRs involve changing the API surface (including removing `@unavailable` annotations), then the CI will likely fail on everything except the `SkipUI` changes due to the fact that the other packages are only built against the most recent release tags of `SkipUI` rather than the `main` branch. That's OK: when the PRs are reviewed, they will all be reviewed together and once merged and included in a new release, the CI will become green again.
@@ -87,8 +86,7 @@ An example of a series of pull requests that demonstrates the workflow of adding
8786

8887
1. Add `View.contextMenu` modifier: https://github.com/skiptools/skip-ui/pull/356
8988
2. Support `View.contextMenu` modifier: https://github.com/skiptools/skip-fuse-ui/pull/93
90-
3. Add ContextMenuPlayground to demonstrate SkipUI `View.contextMenu`: https://github.com/skiptools/skipapp-showcase/pull/74
91-
4. Add ContextMenuPlayground to demonstrate SkipFuseUI `View.contextMenu`: https://github.com/skiptools/skipapp-showcase-fuse/pull/50
89+
3. Add ContextMenuPlayground to demonstrate `View.contextMenu`: https://github.com/skiptools/skipapp-showcase/pull/74
9290

9391

9492
## Integration Frameworks

‎src/content/docs/docs/modules/skip-av/index.md‎

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ Support levels:
268268
</td>
269269
</tr>
270270
<tr>
271-
<td>🟠</td>
271+
<td>🟡</td>
272272
<td>
273273
<details>
274274
<summary><code>AVPlayer</code></summary>
@@ -279,6 +279,21 @@ Support levels:
279279
<li><code>func play()</code></li>
280280
<li><code>func pause()</code></li>
281281
<li><code>func seek(to time: CMTime)</code></li>
282+
<li><code>func seek(to time: CMTime, completionHandler: @escaping (Bool) -&gt; Void)</code></li>
283+
<li><code>func seek(to time: CMTime, toleranceBefore: CMTime, toleranceAfter: CMTime)</code></li>
284+
<li><code>func seek(to time: CMTime, toleranceBefore: CMTime, toleranceAfter: CMTime, completionHandler: @escaping (Bool) -&gt; Void)</code></li>
285+
<li><code>func currentTime() -&gt; CMTime</code></li>
286+
<li><code>func replaceCurrentItem(with item: AVPlayerItem?)</code></li>
287+
<li><code>var currentItem: AVPlayerItem?</code></li>
288+
<li><code>var volume: Float</code></li>
289+
<li><code>var rate: Float</code></li>
290+
<li><code>var isMuted: Bool</code></li>
291+
<li><code>var status: AVPlayer.Status</code></li>
292+
<li><code>var error: Error?</code></li>
293+
<li><code>var actionAtItemEnd: AVPlayer.ActionAtItemEnd</code></li>
294+
<li><code>var automaticallyWaitsToMinimizeStalling: Bool</code></li>
295+
<li><code>var timeControlStatus: AVPlayer.TimeControlStatus</code></li>
296+
<li><code>var reasonForWaitingToPlay: AVPlayer.WaitingReason?</code></li>
282297
</ul>
283298
</details>
284299
</td>
@@ -290,6 +305,45 @@ Support levels:
290305
<summary><code>AVPlayerItem</code></summary>
291306
<ul>
292307
<li><code>init(url: URL)</code></li>
308+
<li><code>init(asset: AVAsset)</code></li>
309+
<li><code>var asset: AVAsset</code></li>
310+
<li><code>var duration: CMTime</code></li>
311+
</ul>
312+
</details>
313+
</td>
314+
</tr>
315+
<tr>
316+
<td>🟠</td>
317+
<td>
318+
<details>
319+
<summary><code>AVAsset</code></summary>
320+
<ul>
321+
<li><code>init(url: URL)</code></li>
322+
<li><code>var url: URL?</code></li>
323+
<li><code>var duration: CMTime</code></li>
324+
</ul>
325+
</details>
326+
</td>
327+
</tr>
328+
<tr>
329+
<td>🟢</td>
330+
<td>
331+
<details>
332+
<summary><code>CMTime</code> / <code>CMTimeRange</code></summary>
333+
<ul>
334+
<li><code>init(value: CMTimeValue, timescale: CMTimeScale)</code></li>
335+
<li><code>init(seconds: Double, preferredTimescale: CMTimeScale)</code></li>
336+
<li><code>init(value: CMTimeValue, timescale: CMTimeScale, flags: CMTimeFlags, epoch: CMTimeEpoch)</code></li>
337+
<li><code>var seconds: Double</code></li>
338+
<li><code>var isValid: Bool</code></li>
339+
<li><code>var isIndefinite: Bool</code></li>
340+
<li><code>var isPositiveInfinity: Bool</code></li>
341+
<li><code>var isNegativeInfinity: Bool</code></li>
342+
<li><code>var isNumeric: Bool</code></li>
343+
<li><code>static let zero, invalid, indefinite, positiveInfinity, negativeInfinity</code></li>
344+
<li><code>CMTimeGetSeconds, CMTimeMake, CMTimeMakeWithSeconds, CMTimeAdd, CMTimeSubtract, CMTimeCompare, CMTimeMinimum, CMTimeMaximum</code></li>
345+
<li><code>CMTimeRange { start, duration, end, containsTime }</code></li>
346+
<li><code>CMTimeRangeMake, CMTimeRangeGetEnd, CMTimeRangeContainsTime</code></li>
293347
</ul>
294348
</details>
295349
</td>

0 commit comments

Comments
 (0)