I can't reproduce this issue any more. Since installing Xcode 15.1, now when I create a new watchOS-only project it, is embedded in the stub iOS application.
I've been trying to fix this issue and I have tried many things. The problem remains, the "Validate App" Button is disabled. I can build the app on real hardware, but I can't upload it to the App Store Connect.
Clicking Distribute opens this sheet, I can export .ipa, but then there will be issue with the Transporter described in the original question. Possibly, Transporter is not yet updated to support watchOS 10 builds. So the Xcode 15 is my only hope.
I suspect that the issue is with my project configuration. The problem is that it is too many unknowns, the default template doesn't work, and there's no proper documentation for watchOS only apps.
What I am trying to do
With Xcode 15, I will attempt to build a minimal reproducible scenario. Using Xcode 15 and creating a new project will make sure I am using an up-to-date default template.
I have created a new project with a Bundle identifier ending with the product name, e.g. "MYApp", com.company.MYApp. Selected "Watch-only App". Include tests checked.
Select main app target, Bundle ID would show .watchkitapp, replaced with com.company.MYApp.
Archiving the product, leads to a problem. The archive is classified as "Other items". I would expect it under "watchOS Apps"
I already know how to fix it by SKIP_INSTALL to YES. And with this change, it's no longer "Generic Xcode Archive", it's "watchOS App Archive"
//:configuration = Release
SKIP_INSTALL = NO
I am restless regarding .watchkitapp, does the bundle ID need to have it? I have tried with and without it, and the only difference I can observe is in Organizer GUI, I can see "watchOS app" in the oval brackets before the bundle ID.
I have tried all 6 permutations for the following flags.
INFOPLIST_KEY_WKWatchOnly = YES
INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = NO
As the target device for archiving I have tried a generic, simulator (which is new in Xcode 15) and real hardware.
The main problem remains. The "Validate App" button is disabled.
I have managed to fix this warning by providing the background for all families.
var body: some View {
switch family {
case ...
// Return your custom widget here for families you support
default:
// Fallback for not supported families
Image(systemName: "xmark.circle")
.containerBackground(Color.black, for: .widget)
}
}
This was caused by running watchOS extension target instead of the app target. I don't really need to debug widgets because the code is so simple, but if you have this issue, just run the app target for now. I also opened a radar FB13141297.
The issue is due to this error message
The widget background view is missing. Please ensure that you have called the `containerBackground(for: .widget) {…}` modifier in your widget view.
Hower I can see the background in SwiftUI preview.
Quick update, will post full details later. I realised that I was using SwiftUI in the wrong way. My problem is that I had a view with multiple .sheet modifiers. If you present a second view, add the .sheet modifier to the second view. Essentially this should allow an unlimited navigation stack.
I can see my widget now. I have not realised that I still have to provide bundle IDs for both targets. This wasn't obvious as during the creation of the project you already provided a bundle identifier. I have kept the default suffixes (1 and 2) and prepended the ID.
File `*.xcodeproj/project.pbxproj`
Key 1 `PRODUCT_BUNDLE_IDENTIFIER`
Key 2 `INFOPLIST_KEY_WKCompanionAppBundleIdentifier`
Make sure that you didn't name your extension "Widget".
With PHPhotoLibraryPreventAutomaticLimitedAccessAlert set to true Should a file a bug if I still see the photos picker when I change preference in the Settings app? There's no reason for my users to change selected photos because I have a custom button in the app to present the Photos picker.
Post not yet marked as solved
There's an easier way than suggested by sir RLKingSoftware.
Call this when your app starts.
UserDefaults.standard.register(defaults: ["key" : "value"])
Additional reading http://dscoder.com/defaults.html
Post not yet marked as solved
Hello, I am sole trader in UK, I believe the right option is "Disregarded Entity".
A disregarded entity is a business that is not seen as a separate entity from the business owner for tax purposes. Rather than the IRS taxing the business, the income of the business is passed through to the owner’s income tax return. In this way, the business and the owner are considered one entity.
https://www.nav.com/blog/what-is-a-disregarded-entity-635010/
If a business entity (other than a per se foreign corporation) has only one owner, it is classified as either a corporation or a disregarded entity. If the single owner does not have limited liability, the non-U.S. entity is disregarded as an entity separate from its owner and the single owner should complete the applicable U.S. tax form in its own name.
https://www.citibank.com/icg/sa/emea/romania/romanian/assets/docs/W-8BEN-E_Completing_Guide_February_20150708.pdf
Good luck, I hope this is helpful.
Post not yet marked as solved
Thank you very much for your post. I have exactly the same issue which haunted me for months. Looks like a bug in watchOS 6 because the issue isn't happening on watchOS 7. Disabling the 2 options you mentioned in step 3 prevents my app to crash on launch.
Post not yet marked as solved
Nov 2020 Update
Forgot to mention important bits, we set ENABLE_TESTABILITY to YES, and we build DEBUG for testing.
The issue remains.
Post not yet marked as solved
Hi @haptic.
My data source looks following:
@Published var dataSource = [CustomIdentifiableHashableStruct]()
struct CustomIdentifiableHashableStruct: Identifiable, Hashable {
	// Contains bunch of string lets
}
I have tried to add Codable, Equatable conformance but it didn't fixed the compilation error.
Post not yet marked as solved
I have not found a solution yet, so instead I just changed UX of my app to use another tap confirmation mechanism rather than ActionSheet, it works even better now.