I am in the process of building my first Watch app as an extension of my iPhone App. I am having problems with the Watch app, but would like to submit the updates I have made for my iOS app. Is there a best practice or guide to help me submit my iPhone app, without the embedded watch components. Right now, iTunes Connect keeps including my watch App, which is not ready, and therefore won't let me submit my app for review.Thanks
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I've created a Catalyst app that runs on WatchOS, iOS, iPadOS and MacOS. It stores some basic data in UserDefaults using Combine. The latest builds are starting to get the following error.2020-05-25 12:10:30.535305-0400 Wasted Time[82077:918516] [User Defaults] Couldn't write values for keys (
ApplicationAccessibilityEnabled
) in CFPrefsPlistSource<0x600002c15f00> (Domain: com.apple.Accessibility, User: kCFPreferencesCurrentUser, ByHost: No,
2020-05-25 12:10:30.538688-0400 Wasted Time[82077:918516] [User Defaults] Couldn't write values for keys (
AccessibilityEnabled
) in CFPrefsPlistSource<0x600002c15f00> (Domain: com.apple.Accessibility, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null), Contents Need Refresh: No): setting preferences outside an application's container requires user-preference-write or file-write-data sandbox access
2020-05-25 12:10:30.539074-0400 Wasted Time[82077:918516] [User Defaults] Couldn't write values for keys (
FullKeyboardAccessFocusRingEnabled
) in CFPrefsPlistSource<0x600002c15f00> (Domain: com.apple.Accessibility, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null), Contents Need Refresh: No): setting preferences outside an application's container requires user-preference-write or file-write-data sandbox access
2020-05-25 12:10:30.540987-0400 Wasted Time[82077:918516] [User Defaults] Couldn't write values for keys (
ApplicationAccessibilityEnabled
) in CFPrefsPlistSource<0x600002c15f00> (Domain: com.apple.Accessibility, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null), Contents Need Refresh: No): setting preferences outside an application's container requires user-preference-write or file-write-data sandbox access
Container: (null), Contents Need Refresh: Yes): setting preferences outside an application's container requires useI I haveI have cofirmed that my App Sandbox settings are showing "File Access -> User Selected File -> Read/Write". The app has a custom suiteName for my UserDefaults, and apprears to actually make the updates. (I do see this error in both Xcode 11 and Xcode 11.5(11E608c).How do I resolve this error?
My Catalyst app seems to be having an issue when coming back from Twitter Authentication. The code works fine on iOS, but the app crashes on the Mac. Here's the detailed error information:=================Process: Wasted Time [82621]Path: /Users/USER/*/Wasted Time.app/Contents/MacOS/Wasted TimeIdentifier: maccatalyst.com.theapapp.wastedtimeVersion: 9.1 (11)Code Type: X86-64 (Native)Parent Process: ??? [1]Responsible: Wasted Time [82621]User ID: 501Date/Time: 2020-05-25 12:26:22.676 -0400OS Version: Mac OS X 10.15.5 (19F94a)Report Version: 12Bridge OS Version: 4.5 (17P55289a)Anonymous UUID: 0826D513-91D4-9EDF-EA2C-3EA562E46A48Time Awake Since Boot: 140000 secondsSystem Integrity Protection: enabledCrashed Thread: 0 Dispatch queue: com.apple.main-threadException Type: EXC_CRASH (SIGABRT)Exception Codes: 0x0000000000000000, 0x0000000000000000Exception Note: EXC_CORPSE_NOTIFYApplication Specific Information:Couldn't register maccatalyst.com.theapapp.wastedtime.gsEvents with the bootstrap server. Error: unknown error code (1100).This generally means that another instance of this process was already running or is hung in the debugger.abort() calledThread 0 Crashed:: Dispatch queue: com.apple.main-thread0 libsystem_kernel.dylib 0x00007fff6e14b33a __pthread_kill + 101 libsystem_pthread.dylib 0x00007fff6e207e60 pthread_kill + 4302 libsystem_c.dylib 0x00007fff6e0d2808 abort + 1203 com.apple.GraphicsServices 0x00007fff568b49ca _GSRegisterPurpleNamedPortInPrivateNamespace + 3944 com.apple.GraphicsServices 0x00007fff568b4837 GSRegisterPurpleNamedPort + 235 com.apple.GraphicsServices 0x00007fff568b4322 _GSEventInitializeApp + 2906 com.apple.GraphicsServices 0x00007fff568b41f4 GSEventInitialize + 367 com.apple.UIKitCore 0x00007fff7495bf4f UIApplicationMain + 13948 maccatalyst.com.theapapp.wastedtime 0x00000001096a3eea main + 58 (AppDelegate.swift:14)9 libdyld.dylib 0x00007fff6e003cc9 start + 1================Xcode then gives the following error:2020-05-25 12:26:22.521054-0400 Wasted Time[82077:930719] [assertion] Error acquiring assertion: <NSError: 0x600000d7dbf0; domain: RBSAssertionErrorDomain; code: 2; reason: "Specified target process does not exist">
I have an Intent handler that is used on iOS in shortcuts for my app. The app is also a Catalyst app, but when I try to build it with the Extension I get the following message.
error: Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier.
I am assuming that I cannot include the extension in Catalyst, is that true in iOS14?
I've been trying to use the console to debug a problem with my SiriKit Intent which I added to launch my app from short cuts. The Log messages are as follows:
error 21:39:20.087846-0400 intents_helper +[INUIImageSizeProvider downscaledPNGImageForImage:size:error:] Non-fatal error: Error Domain=IntentsErrorDomain Code=6009 "Scaled size is larger than image size" UserInfo={NSDebugDescription=Scaled size is larger than image size}
error 21:39:20.090408-0400 Shortcuts -[INCache cacheableObjectForIdentifier:] Unable to find cacheable object with identifier intents-remote-image-proxy:?proxyIdentifier=82C0975C-D3F9-69E5-6F55-7E4EBEE3F41A.png&storageServiceIdentifier=com.apple.Intents.INImageServiceConnection in cache.
error 21:39:20.096812-0400 Shortcuts _INCExtensionManagerFetchMatchingSiriExtensionForIntent_block_invoke_2 Failed to find extension Error Domain=INExtensionMatchingErrorDomain Code=3001 "(null)" UserInfo={ExtensionPointName=com.apple.intents-service}
error 21:39:20.100112-0400 Shortcuts -[WFAction runWithInput:userInterface:parameterInputProvider:variableSource:completionHandler:]_block_invoke Action <WFHandleCustomIntentAction: 0x7f81bec560c0, identifier: com.theapapp.wastedtime.StartMeetingIntent, parameters: 2> finished with error {domain: WFIntentExecutorErrorDomain, code: 100}. Error Domain=WFIntentExecutorErrorDomain Code=100 "There was a problem with the app." UserInfo={NSUnderlyingError=0x6000020fecd0 {Error Domain=INExtensionMatchingErrorDomain Code=3001 "(null)" UserInfo={ExtensionPointName=com.apple.intents-service}}, NSLocalizedFailureReason=Could not run Start a meeting, NSLocalizedDescription=There was a problem with the app.}
error 21:39:20.134294-0400 intents_helper bundleProxyForPID No bundleProxy for bundleURL=file:///Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/libexec/
error 21:39:20.185873-0400 coreduetd error in setObject {
DKObjUUID = "ABF04557-70CC-4257-915F-834F529DCB8B";
class = INRunWorkflowIntent;
direction = 0;
donatedBySiri = 0;
handlingStatus = 0;
sourceBundleID = "com.apple.shortcuts";
sourceItemID = "FC884509-AE97-4BAB-97C8-B7B8CFFAC879";
type = Workflow;
verb = RunWorkflow;
} for keyPath /device/intents/dataDictionary : Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service on pid 0 named com.apple.coreduetd.context was invalidated." UserInfo={NSDebugDescription=The connection to service on pid 0 named com.apple.coreduetd.context was invalidated.}
My App has an intent handler that calls that intent as follows:
override func handler(for intent: INIntent) -> Any {
logger.log("\(intent)")
switch intent {
case is StartMeetingIntent:
return StartMeetingIntentHandler()
default:
fatalError("No handler for this intent")
}
}
And my Intent is defined as follows:
import Intents
import SwiftUI
import os
class StartMeetingIntentHandler: NSObject, StartMeetingIntentHandling {
let logger=Logger(subsystem: "com.theapapp.wastedtime", category: "Start Meeting Intent")
var people: [INObject]?
func handle(intent: StartMeetingIntent, completion: @escaping (StartMeetingIntentResponse) -> Void) {
if let attendees = intent.people {
completion(StartMeetingIntentResponse.success(result: attendees))
} else {
logger.log("failure")
}
}
func resolvePeople(for intent: StartMeetingIntent, with completion: @escaping (StartMeetingPeopleResolutionResult) -> Void) {
let people = Int(truncating: intent.people ?? 0)
if people < 0 {
completion(StartMeetingPeopleResolutionResult.unsupported(forReason: StartMeetingPeopleUnsupportedReason.negativeNumbersNotSupported))
} else if people > 1000 {
completion(StartMeetingPeopleResolutionResult.unsupported(forReason: StartMeetingPeopleUnsupportedReason.greaterThanMaximumValue))
} else {
completion(StartMeetingPeopleResolutionResult.success(with: people))
}
}
}
In the Build for the extension the Intent is listed under Supported Intents. (as StartMeetingIntent).
And the Extension is embedded in my application.
I am stumped.. so any pointers on what I should look at next would be greatly appreciated. Thanks!
I am working on a setup screen with a dollar value and a picker. I have the dollar value setup with a currencyFormatter, and a .keyboardType(.decimalPad), if the user touches outside of the field, the .resignFirstResponder doesn't happen, so I added it to my Picker. However, If the user touches the picker, the .currencyFormatter is not applied.
private var currencyFormatter: NumberFormatter = {
let formatter = NumberFormatter()
formatter.isLenient = true
formatter.numberStyle = .currency
return formatter
}()
var body: some View {
GeometryReader { geometry in
VStack{
VStack{
HStack{
Text("Burden Rate: ")
.padding(.trailing)
Spacer()
TextField("Enter Burden Rate",
value: $meetingSetup.saveRateValue,
formatter: currencyFormatter,
onEditingChanged: {_ in
logger.log("editing changed")
},
onCommit: {
logger.log("updated")
}
)
.textFieldStyle(RoundedBorderTextFieldStyle())
.multilineTextAlignment(.trailing)
.padding(.leading)
.keyboardType(.decimalPad)
}
HStack{
Text("Select One: ")
Spacer()
Picker("Calculation", selection: $selectedRateCalc) {
ForEach( 0 ..< rateCalc.count) {
Text(self.rateCalc[$0]).tag($0)
}
}
.pickerStyle(SegmentedPickerStyle())
.onChange(of: selectedRateCalc, perform: { value in
switch selectedRateCalc {
case 0:
meetingSetup.hourlyEnabled = false
meetingSetup.salaryEnabled = true
print("Salary Selected")
case 1:
meetingSetup.hourlyEnabled = true
meetingSetup.salaryEnabled = false
print("Hourly Selected")
default:
print("ERROR")
}
self.hideKeyboard()
})
}
}
}
Spacer()
}
}
}
#if canImport(UIKit)
extension View {
func hideKeyboard() { UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
}
#endif
I've reduced some of the other screen to make this cleaner for review. How can I correctly clear the keyboard AND have it format the currency correctly.
Thanks!
I have tried to connect my Apple TV 4K to Xcode, via wireless. I get to the point where I enter the six digit code displayed on the Apple TV, and then Xcode just redisplays the messages to Pair the TV. Any suggestions?
I am seeing this with Xcode 12.0 (all betas)
Process:							 Xcode [1211]
Path:									/Applications/Xcode-beta.app/Contents/MacOS/Xcode
Identifier:						com.apple.dt.Xcode
Version:							 12.0 (17210.1)
Build Info:						IDEFrameworks-17210001000000000~14 (12A8189n)
Code Type:						 X86-64 (Native)
Parent Process:				??? [1]
Responsible:					 Xcode [1211]
User ID:							 501
Date/Time:						 2020-09-08 16:06:15.967 -0400
OS Version:						Mac OS X 10.16 (20A5364e)
Report Version:				12
Bridge OS Version:		 5.0 (18P50370a)
Anonymous UUID:				627D7A1F-DDFC-8DCE-8ACF-0ECBAB9020EA
Time Awake Since Boot: 460 seconds
System Integrity Protection: enabled
Crashed Thread:				0	Dispatch queue: com.apple.main-thread
Exception Type:				EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes:			 0x0000000000000001, 0x0000000000000000
Exception Note:				EXC_CORPSE_NOTIFY
Termination Signal:		Illegal instruction: 4
Termination Reason:		Namespace SIGNAL, Code 0x4
Terminating Process:	 exc handler [1211]
Application Specific Information:
ProductBuildVersion: 12A8189n
Crashing on exception: The window has been marked as needing another Update Constraints in Window pass, but it has already had more Update Constraints in Window passes than there are views in the window.
<DVTDevicesWindow: 0x7fbaa5739c30> 0x160 (352) {{181, 204}, {1040, 700}} Devices en
Application Specific Backtrace 1:
0	 CoreFoundation											0x00007fff2433b0df __exceptionPreprocess + 242
1	 DVTFoundation											 0x000000010a36eba5 DVTFailureHintExceptionPreprocessor + 424
2	 libobjc.A.dylib										 0x00007fff2419d469 objc_exception_throw + 48
3	 CoreFoundation											0x00007fff2433af43 +[NSException raise:format:] + 189
4	 AppKit															0x00007fff26d11119 -[NSWindow(NSDisplayCycle) _postWindowNeedsUpdateConstraintsUnlessPostingDisabled] + 1721
5	 AppKit															0x00007fff26cf616d -[NSView
......
Any suggestions on how to get beyond this.
I have the following HStack in my appleTV app, but the remote will not go to the Button on the right side of the stack.
HStack{
if( self.meeting.meetingEndedState == false){
		Button(action:{
					 _ = self.meeting.addAttendee()
} ) {
				Image(systemName: "plus.circle.fill")
.font(Font.system(size: 42, design: .rounded))
}
				.mask(Circle())
.padding()
Text("\(self.meeting.numberOfAttendees)")
.padding()
Button(action:{
	_ = self.meeting.removeAttendee() })
				{
	 Image(systemName: "minus.circle.fill")
.font(Font.system(size: 42, design: .rounded))
}
.mask(Circle())
.padding()
} else {
		Button(action: {
	 self.meeting.meetingReset()
self.meeting.numberOfAttendees=1
}, label: {
	 Text("Reset")
	 }).buttonStyle(MyButtonStyle(color: .blue))
}
}
.padding()
What I am doing wrong?
I know with macOS 11 and iOS 14, iOS apps will run on Apple Silicon. I have a Catalyst version of my app, that I would like to add to the same AppStore Connect entry. I know I have to remove my Mac App Store entry, but I can't figure out how to change the App bundle name in the App Store Connect for the the Catalyst app.
Do I have to build a native Mac Version with the same bundle ID as the iOS version to have it on the same App Connect entry?
My app is free and I want people who have it on iOS to have access on macOS.
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
App Store Connect
iOS
macOS
Working working with a SwiftUI Architecture WatchOS app, if you want to use ExtensionDelegate you need to create your own. I have done this, but when I try to actually access the delegate in the code, I am getting the following error message Could not cast value of type SwiftUI.ExtensionDelegate' (0x7fff8441b480) to 'TestMe_WatchKit_Extension.ExtensionDelegate' (0x10c3b36d0).
I have defined the ExtensionDelegate as -
class ExtensionDelegate: NSObject, WKExtensionDelegate {
		var meetingStatistics:	MeetingStatistics = MeetingStatistics()
}
in my @main - I have the following:
@main
struct WatchApp: App {
@WKExtensionDelegateAdaptor(ExtensionDelegate.self) var delegate
// code
}
When I try to access the delegate within another class, not via @EnvironmentObject, but via - let delegate = WKExtension.shared().delegate as! ExtensionDelegate I get the above error.
I have recently installed a new UPS which as a service to automatically shut down my Mac when certain events happen. It required that I install java. It required I install a new version of java from the Oracle site - here's my version info
java 15.0.1 2020-10-20
Java(TM) SE Runtime Environment (build 15.0.1+9-18)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.1+9-18, mixed mode, sharing)
now when ever I try to upload via Organizer in Xcode I get the following message:
Could not find or load main class 1.Library.Java.Extensions:.Library.Java.Extensions:.Network.Library.Java.Extensions:.System.Library.Java.Extensions:.usr.lib.java:.
Has anyone else seen this? Other than removing the UPS software any ideas how to fix?
I have an App I've been working on with CloudKit to sync data between App on iOS, iPadOS and macOS. I have updated my iPhone and iPad to latest betas. On the iPad I had to wipe and rebuild from scratch. As of now, the iPhone is working fine and changes are showing up on my Mac, but the iPad is not pulling down the data that is in CloudKit. Is there some security or beta testing change that is causing this? They are all logged into the same iCloud account.
I made a minor change the UI of my tvOS App, and am now getting errors related to the App Icon. I have confirmed that all the background images DO match the requirements but App Store Connect won't let me upload:
App Store Connect Operation Error
Invalid Image Asset. The image stack 'App Icon' in 'Payload/My TV.app/Assets.car' has a background layer image that does not match the canvas dimensions '400x240'.
App Store Connect Operation Error
Invalid Image Asset. The image stack 'App Icon' in 'Payload/My TV.app/Assets.car' has a background layer image that does not match the canvas dimensions '800x480'.
App Store Connect Operation Error
Invalid Image Asset. The image stack 'App Icon' in 'Payload/My TV.app/Assets.car' has a background layer image that does not match the canvas dimensions '1280x768'.
App Store Connect Operation Error
Invalid Image Asset. The image stack 'App Icon' in 'Payload/My TV.app/Assets.car' has a background layer image that does not match the canvas dimensions '2560x1536'.
App Store Connect Operation Error
Invalid Image Asset. The App Store Icon must only contain an image with size (1280pt × 768pt @1x). Refer to https://developer.apple.com/tvos/human-interface-guidelines/icons-and-images/app-icon for more information
Have the standards changed? Or is there another issue I should be looking at? Thanks!
So I am banging my head, I realized my stand along Watch App had a STUPID long name of "App Name - WatchKit App" so I went into my Target and changed the Display Name to "App Name" removing WatchKit App. Well now my app won't validate when uploading to the Appstore. I get the message - Invalid Info.plist key. The key
WKExtensionDelegateClassName in bundle App Name.app/Watch/App Name WatchKit App.app is invalid.
My Info.plist has the value of
<key>WKExtensionDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).ExtensionDelegate</string>
I have confirmed that I have @WKExtensionDelegateAdaptor(ExtensionDelegate.self) var delegate in my @main for the SwiftUI App. And when I print a few values in my app launch I get the following confirmations:
Super Init - ExtensionDelegate
Contentview
applicationDidFinishLaunching for watchOS
Super Init - ExtensionDelegate
Optional(My_App_Extension.Setup)
Optional(My_App_Extension.Statistics)
Optional(My_App_Extension.Other)
applicationDidBecomeActive for watchOS
update complication
I create three classes at launch and print this in the log with print(ExtensionDelegate.shared.Setup as Any) , etc. The other lines are just confirming where I am at app startup.
This is a WatchOS8 application and I am running Xcode version Version 13.1 (13A1030d).