Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Disallow the "watchOS" supported destination for multiplatform apps #1470

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

tatsuky
Copy link
Contributor

@tatsuky tatsuky commented Apr 18, 2024

This PR addresses #1463, where the "Embed Watch Content" build phase isn't automatically generated when a watchOS app is created using the supportedDestinations configuration.

According to Apple's documentation:

iOS, iPadOS, macOS, visionOS, and tvOS apps can share a single target. watchOS apps remain in a separate target.

Xcode 15.3 is also not capable of creating multiplatform apps that contain the watchOS supported destination. Such the option does not show up on the UI:

The "watchOS" destination does not show up for multiplatform apps on Xcode 15.3

Provided Xcode doesn't support it now, I had XcodeGen error out when supportedDestinations for an application contains watchOS. I added a new validation error case because I think this is an exceptional case that needs a special consideration.

We can continue to create a watchOS app as an independent target by using the platform configuration as before. This PR does not affect the configurations of non-application targets.

Tests

You can use the following example specs to verify the changes.

A "success" case using platform
name: MyApp
options:
  bundleIdPrefix: com.myapp
targets:
  UniversalApp:
    dependencies:
      - target: WatchApp
    supportedDestinations: [iOS, macOS]
    type: application
    sources:
      - Universal
    settings:
      base:
        PRODUCT_BUNDLE_IDENTIFIER: com.myapp.UniversalApp
    info:
      path: Universal/Info.plist
  WatchApp:
    platform: watchOS
    type: application
    sources:
      - Watch
    settings:
      base:
        PRODUCT_BUNDLE_IDENTIFIER: com.myapp.UniversalApp.WatchApp
    info:
      path: Watch/Info.plist
      properties:
        WKCompanionAppBundleIdentifier: com.myapp.UniversalApp
        WKApplication: true
An "error" case using supportedDestinations
name: MyApp
options:
  bundleIdPrefix: com.myapp
targets:
  UniversalApp:
    dependencies:
      - target: WatchApp
    supportedDestinations: [iOS, macOS]
    type: application
    sources:
      - Universal
    settings:
      base:
        PRODUCT_BUNDLE_IDENTIFIER: com.myapp.UniversalApp
    info:
      path: Universal/Info.plist
  WatchApp:
    supportedDestinations: [watchOS]
    type: application
    sources:
      - Watch
    settings:
      base:
        PRODUCT_BUNDLE_IDENTIFIER: com.myapp.UniversalApp.WatchApp
    info:
      path: Watch/Info.plist
      properties:
        WKCompanionAppBundleIdentifier: com.myapp.UniversalApp
        WKApplication: true

@tatsuky
Copy link
Contributor Author

tatsuky commented Apr 18, 2024

Hi @yonaskolb, @bcardarella and @FelixLisczyk

I'm aware that this fix uses a little different approach than what was suggested in the issue discussion. Could you take a look at the change and let me know what you think? Thanks.

Copy link
Collaborator

@freddi-kit freddi-kit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Collaborator

@giginet giginet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great!

Please update CHANGELOG.md

@tatsuky
Copy link
Contributor Author

tatsuky commented Apr 18, 2024

@freddi-kit, @giginet
Just updated CHANGELOG - PTAL.

Copy link

@FelixLisczyk FelixLisczyk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. Thank you! 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants