Posts

Sort by:
Post not yet marked as solved
0 Replies
27 Views
Over the years I’ve helped a lot of folks investigate a lot of crashes. In some cases those crashes only make sense if you know a little about how Foundation and Core Foundation types are toll-free bridged. This post is my attempt to explain that. If you have questions or comments, please put them in a new thread. Tag it with Foundation and Debugging so that I see it. Share and Enjoy — Quinn “The Eskimo!” @ Devel oper Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" Crashes on the Toll-Free Bridge Certain Core Foundation (CF) types are toll-free bridged to their Foundation equivalent. That allows you to pass the Foundation object to a CF routine and vice versa [1]. For example, NSData and CFData are toll-free bridged, allowing you to pass an NSData object to a CF routine like CFDataGetBytePtr. For more information on this topic, see Toll-Free Bridged Types within Core Foundation Design Concepts in the Documentation Archive. This is cool, but it does present some interesting challenges. One of these relates to subclassing. Many of the toll-free bridge Foundation types support subclassing and, if you create a instance of your subclass and pass it to CF, CF has to do the right thing. Continuing the NSData example above, it’s legal [2] to create your own subclass of NSData with a completely custom implementation. As long as you implement the -bytes method and the length property, all the other NSData methods will just work. Moreover, this class works with CFData routines as well. If you pass an instance of your subclass to CFDataGetBytePtr, CF detects that it’s an Objective-C object and calls your -bytes method. Exciting! So, how does this actually work? It relies on the fact that CF and Objective-C types share a common object header. That object header is an implementation detail, but the first word of the header is always an indication of the class [3]. CF uses this word to distinguish between CF and Objective-C objects. Note This basic technique is used by other Objective-C compatible types, including Swift objects and XPC objects. If, for example, you call CFRetain on Swift object, it detects that this is an Objective-C compatible object and calls objc_retain, which in turns detects that this is a Swift object and calls swift_retain. To see this in action, check out the Swift Foundation open source. Continuing our NSData example, the first line of CFDataGetBytePtr uses the CF_OBJC_FUNCDISPATCHV macro to check if this is an Objective-C object and, if so, call -bytes on it. Sadly, the open source trail goes cold here, because Objective-C integration is only supported on Apple platforms. However, some disassembly reveals the presence of an internal routine called CF_IS_OBJC. (lldb) disas -n CFDataGetBytePtr CoreFoundation`CFDataGetBytePtr: … <+0>: pacibsp … <+4>: stp x20, x19, [sp, #-0x20]! … <+8>: stp x29, x30, [sp, #0x10] … <+12>: add x29, sp, #0x10 … <+16>: mov x19, x0 … <+20>: mov w0, #0x14 … <+24>: mov x1, x19 … <+28>: bl 0x19cc60100 ; CF_IS_OBJC … WARNING Do not rely on the presence or behaviour of CF_IS_OBJC. This is an implementation detail. It has changed many times in the past and may well change in the future [4]. While this is an implementation detail, it’s useful to know about when debugging. If you pass something that’s not a valid object to CFDataGetBytePtr, you might see it crash in CF_IS_OBJC. For example, this code: void test(void) { struct { int i; } s = { 0 }; CFDataGetBytePtr( (const struct __CFData *) &s ); } crashes like this: Exception Type: EXC_BREAKPOINT (SIGTRAP) … Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 CoreFoundation … CF_IS_OBJC + 76 1 CoreFoundation … CFDataGetBytePtr + 32 2 xxot … test + 24 … … In this case CF_IS_OBJC has detected the problem and trapped, resulting in an EXC_BREAKPOINT crash. However, if you pass it a pointer that looks more like an object, this might crash trying to dereference a bad pointer, which will result in a EXC_BAD_ACCESS crash. The other common failure you see occurs when you pass it an Objective-C object of the wrong type. Consider code like this: void test(void) { id str = [NSString stringWithFormat:@"Hello Cruel World!-%d", (int) getpid()]; const void * ptr = CFDataGetBytePtr( (__bridge CFDataRef) str); … } When you run this code, it throws a language exception like this: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString bytes]: unrecognized selector sent to instance 0x6000028545a0' *** First throw call stack: ( 0 CoreFoundation … __exceptionPreprocess + 176 1 libobjc.A.dylib … objc_exception_throw + 60 2 CoreFoundation … -[NSObject(NSObject) __retain_OA] + 0 3 CoreFoundation … ___forwarding___ + 1580 4 CoreFoundation … _CF_forwarding_prep_0 + 96 5 xxot … test + 92 … ) CFDataGetBytePtr has detected this is an Objective-C object and called -bytes on it. However, this is actually an NSString [5] and NSString doesn’t implement the -bytes method. The end result is an unrecognized selector exception. [1] To be clear, when using CF objects in Objective-C you first cast the CF object to its Foundation equivalent and then call Objective-C methods on it. [2] While it’s legal to do this, it’s probably not very sensible. Subclassing Foundation types is something that might’ve made sense back in the day, but these days there are generally better ways to solve your problems. [3] Historically this word was called isa and was of type Class, that is, a pointer to the actual Objective-C class. These days things are much more complex (-: [4] Historically, CF_IS_OBJC was very simple: If the object’s isa word was 0, it was a CF object, otherwise it was an Objective-C object. That’s no longer the case. [5] The actual type is __NSCFString. That’s because NSString is a class cluster. For more about that, see Class Clusters within Cocoa Fundamentals Guide in the Documentation Archive.
Posted
by
Post not yet marked as solved
3 Replies
31 Views
I am a bit confused on whether certain Video Toolbox (VT) encoders support hardware acceleration or not. When I query the list of VT encoders (VTCopyVideoEncoderList(nil,&encoderList)) on an iPhone 14 Pro device, for avc1 (AVC / H.264) and hevc1 (HEVC / H.265) encoders, the kVTVideoEncoderList_IsHardwareAccelerated flag is not there, which -based on the documentation found on the VTVideoEncoderList.h- means that the encoders do not support hardware acceleration: optional. CFBoolean. If present and set to kCFBooleanTrue, indicates that the encoder is hardware accelerated. In fact, no encoders from this list return this flag as true and most of them do not include the flag at all on their dictionaries. On the other hand, when I create a compression session using the VTCompressionSessionCreate() and pass the kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder as true in the encoder specifications, after querying the kVTCompressionPropertyKey_UsingHardwareAcceleratedVideoEncoder using the following code, I get a CFBoolean value of true for both H.264 and H.265 encoder. In fact, I get a true value (for both of the aforementioned encoders) even if I don't specify the kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder during the creation of the compression session (note here that this flag was introduced in iOS 17.4 ^1). So the question is: Are those encoders actually hardware accelerated on my device, and if so, why isn't that reflected on the VTCopyVideoEncoderList() call?
Posted
by
Post not yet marked as solved
0 Replies
1 Views
I am setting up a HLS server for MVHEVC files... just find that if tag mp4 files using Asset Writer with let colorPropertySettings = [ AVVideoColorPrimariesKey: AVVideoColorPrimaries_ITU_R_709_2, AVVideoYCbCrMatrixKey: AVVideoTransferFunction_ITU_R_709_2, AVVideoTransferFunctionKey: AVVideoYCbCrMatrix_ITU_R_709_2 ] the HLS playback well on Safari. but if tag mp4 files using using Asset Writer with let colorPropertySettings = [ AVVideoColorPrimariesKey: AVVideoColorPrimaries_ITU_R_2020, AVVideoYCbCrMatrixKey: AVVideoYCbCrMatrix_ITU_R_2020, AVVideoTransferFunctionKey: AVVideoTransferFunction_SMPTE_ST_2084_PQ ] the HLS can not play on Safari. looks like HLS does NOT support MVHEVC HDR10. OR have I lost any setting for MVHEVC HDR10? thanks.
Posted
by
Post not yet marked as solved
0 Replies
1 Views
I'm trying to get my iOS app ready for distribution, but after running Product->Archive and clicking Validate App, XCode does a few steps of validation and then crashes without finishing. Here's the top of the crash log, I can reproduce easily and get the full report if needed. This is a blocker for me and I really need a solution. Translated Report (Full Report Below) ------------------------------------- Process: Xcode [93086] Path: /Applications/Xcode.app/Contents/MacOS/Xcode Identifier: com.apple.dt.Xcode Version: 15.3 (22618) Build Info: IDEApplication-22618000000000000~2 (15E204a) App Item ID: 497799835 App External ID: 863955376 Code Type: ARM-64 (Native) Parent Process: launchd [1] User ID: 501 Date/Time: 2024-05-07 09:20:28.9493 +0200 OS Version: macOS 14.4.1 (23E224) Report Version: 12 Anonymous UUID: 3BF4943C-9199-C215-F9AB-59223913BAC9 Sleep/Wake UUID: 0AFCFDE1-E734-4B4D-88F6-72BC777F81CB Time Awake Since Boot: 650000 seconds Time Since Wake: 2935 seconds System Integrity Protection: enabled Crashed Thread: 0 Dispatch queue: archive info plist lock Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Termination Reason: Namespace SIGNAL, Code 6 Abort trap: 6 Terminating Process: Xcode [93086] Application Specific Information: com.apple.main-thread abort() called Application Specific Signatures: NSInvalidArgumentException Application Specific Backtrace 0: 0 CoreFoundation 0x000000019d59eccc __exceptionPreprocess + 176 1 DVTFoundation 0x00000001044dcbc4 DVTFailureHintExceptionPreprocessor + 388 2 libobjc.A.dylib 0x000000019d086788 objc_exception_throw + 60 3 CoreFoundation 0x000000019d4b67d0 -[__NSPlaceholderDictionary initWithObjects:forKeys:count:] + 728 4 CoreFoundation 0x000000019d4b64cc +[NSDictionary dictionaryWithObjects:forKeys:count:] + 52 5 IDEFoundation 0x0000000109a58a34 -[IDEArchiveDistributionRecord dictionaryRepresentation] + 296 6 IDEFoundation 0x0000000109a3a21c __31-[IDEArchive setDistributions:]_block_invoke + 16 7 DVTFoundation 0x00000001044d4700 -[NSArray(DVTFoundationClassAdditions) dvt_arrayByApplyingBlock:] + 224 8 IDEFoundation 0x0000000109a3a1ac -[IDEArchive setDistributions:] + 84 9 Foundation 0x000000019e624370 -[NSObject(NSKeyValueObservingPrivate) _changeValueForKeys:count:maybeOldValuesDict:maybeNewValuesDict:usingBlock:] + 608 10 Foundation 0x000000019e64da24 -[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:key:key:usingBlock:] + 64 11 Foundation 0x000000019e667688 _NSSetObjectValueAndNotify + 284 12 IDEFoundation 0x0000000109a39fa4 __36-[IDEArchive addDistribution:error:]_block_invoke + 156 13 libdispatch.dylib 0x000000019d29a3e8 _dispatch_client_callout + 20 14 libdispatch.dylib 0x000000019d2a98d8 _dispatch_lane_barrier_sync_invoke_and_complete + 56 15 DVTFoundation 0x000000010452127c DVTDispatchBarrierSync + 148 16 DVTFoundation 0x00000001044fd024 -[DVTDispatchLock performLockedBlock:] + 60 17 IDEFoundation 0x0000000109a39dcc -[IDEArchive addDistribution:error:] + 200 18 IDEFoundation 0x00000001099e05f4 __41-[IDEDistributionValidationStep validate]_block_invoke + 116 19 DVTFoundation 0x0000000104520598 __DVT_CALLING_CLIENT_BLOCK__ + 16 20 DVTFoundation 0x0000000104520d70 __DVTSyncPerformBlock_block_invoke + 68 21 CoreFoundation 0x000000019d529a48 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 28 22 CoreFoundation 0x000000019d52995c __CFRunLoopDoBlocks + 356 23 CoreFoundation 0x000000019d528dec __CFRunLoopRun + 2440 24 CoreFoundation 0x000000019d527e0c CFRunLoopRunSpecific + 608 25 HIToolbox 0x00000001a7cc3000 RunC
Posted
by
Post not yet marked as solved
0 Replies
3 Views
Hi Team, I have an Acer Connect D5 Dongle (A very small 5G USB-C Modem). When I plug in to Mac Mac (Sonoma 14.5b) The Dongle is perfectly show in system profiler and IORegistryExplorer like an old Sierra WWAN or Novatel Merlin. But I have an issue in Network pane of System Pref; the modem do not appear in network. Any idea to help me ? Thanks !
Posted
by
Post not yet marked as solved
0 Replies
1 Views
import SwiftUI import TipKit @main struct TipKit_WithPresentPageApp: App { var body: some Scene { WindowGroup { ContentView() .task { try? Tips.resetDatastore() try? Tips.configure([ .datastoreLocation(.applicationDefault) ]) } } } } import SwiftUI struct ContentView: View { @State private var isPresented: Bool = false var body: some View { NavigationStack { VStack { Image(systemName: "globe") .imageScale(.large) .foregroundStyle(.tint) .popoverTip(MyTip()) .padding(100) Button("Hit Me!") { isPresented.toggle() // When the TipKit notification appears, the 'present sheet' button will be non-functional. (iPhone SE and simulator devices) } .padding() .sheet(isPresented: $isPresented) { PresentPage() } } } } } import SwiftUI struct PresentPage: View { var body: some View { Text("Hello, world again!") .font(.title) } } import TipKit struct MyTip: Tip { var title: Text { Text("Test") } var message: Text? { Text("Hi") } } When the TipKit notification appears, the 'present sheet' button will be non-functional. (iPhoneSE Landscape Right) When using the iPhone SE (Landscape Right) or its simulator (iPhone SE Landscape Right), running iOS 17.2. Whenever the TipKit notification is triggered and displayed on the screen, the 'present sheet' button, which is typically used for presenting a new sheet within the app, becomes non-functional. Device: iPhoneSE iOS 17.2 Does anyone know how to bypass this bug? Thank you.
Post not yet marked as solved
0 Replies
4 Views
Hi, I am integrating iMessage app where I have audio which I want to send as Message. But My requirement is to send a custom layout with play button on it and by tapping on it I can play/pause audio. Also On tapping on sent message view presentation style changes to expanded while I want to not have any presentation change. I just want to tap on message to play audio, nothing else. recently I tried to make a custom layout and then by taking its screenshot I sent it as image, but issue is I cant make this view interqctive. I can play audio on tap of message but I also want to update the layout of the selected message. func sendCustomViewMessage(url:URL) { let customView = MessageView(frame: CGRect(x: 0, y: 0, width: 150, height: 50)) //CustomView(frame: CGRect(x: 0, y: 0, width: 200, height: 200)) // Initialize your custom view customView.audioURL = url let customViewImage = imageFromView(view: customView) // Convert custom view to UIImage let layout = MSMessageTemplateLayout() layout.image = customViewImage // Set the image of the message layout layout.mediaFileURL = url layout.caption = "Firt Message" let message = MSMessage() message.layout = layout message.url = url self.activeConversation?.insert(message, completionHandler: nil) } I am searching since days about this but I couldn't get any appropriate solution, can anyone help me on this?
Posted
by
Post not yet marked as solved
0 Replies
1 Views
The app downloads assets consisting of custom fonts using tags from On-Demand Resources, registers them in the system font, and provides them to other apps such as Freeform through UIFontPickerViewController. Custom Fonts that were applied well until iOS 16 appear as Helvetica starting from iOS 17 and cannot be used. As the font list appears in the device's Settings > General > Font, the font downloaded from On-Demand Resources is registered in the system font. It has been confirmed to occur particularly frequently starting from iPhone 15 and iOS 17 and above. The app requests download from On-Demand Resources with NSBundleResourceRequest along with tags, receives assets in response with conditionally beginAccessingResources and beginAccessingResources, and then registers them in the system using CTFontManagerRegisterFontURLs.
Posted
by
Post not yet marked as solved
0 Replies
1 Views
When I'm trying to enrol the account with apple developer membership I'm getting the pop up of "There may be an issue with your account that needs to be resolved before you can continue, please contact support", and while contacting support there is no response from support team. Kindly let me know what is wrong with it.
Posted
by
Post not yet marked as solved
0 Replies
2 Views
On our CI (GitHub Actions) we are signing our .ipa with codesign and after that uploads the resulting .ipa with altool to TestFligt. The problem is that the entitlements added by codesign no longer appear when we view the build on TestFlight. The app requires entitlements for push notification and for associated domains. codesign -s Distribution prod.entitlements prod.ipa Immediately after we do a codesign --verbose --display --entitlements - and the entitlements show fine. Next command is xcrun altool --upload-app --type ios -f prod.ipa --apiKey $api_key_id --apiIssuer $appstore_api_key_issuer To us it seems like altool strips the entitlements from the .ipa. What are we doing wrong?
Posted
by
Post not yet marked as solved
0 Replies
6 Views
My project was working fine on xcode 14 for ios 16 simulators and real devices with all setup and pods, recently i updated system for xcode 15, and sicne then on build getting this error for simulator and real devices - Driver threw unknown argument: '-bvvutkjqcsvcmlfdhxkrjtgqdzeg/Build/Intermediates.noindex/' without emitting errors. i did everyting - clean ,deep clean, restart, update cocoapod, all pods update, deintegrate - install again, delete cache, delete derived data btw - this- bvvutkjqcsvcmlfdhxkrjtgqdzeg/Build/Intermediates.noindex/ is a file getting generated in derived data - and in log getting this also - error: Driver threw unknown argument: '-bvvutkjqcsvcmlfdhxkrjtgqdzeg/Build/Intermediates.noindex/' without emitting errors. (in target 'fabfinance' from project ' ') this is my pod file - # Uncomment the next line to define a global platform for your project # platform :ios, '13.0' target 'fabfinance' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # Pods for fabfinance pod 'Alamofire' pod 'SwiftyJSON' pod 'PopupDialog' pod 'JMImageCache' #pod 'Firebase/Analytics' #pod 'Firebase/Messaging' #pod 'Firebase/Crashlytics' #pod 'Firebase/Core' #pod 'Firebase/Auth' pod 'SOTabBar' pod 'MaterialComponents' pod 'IQKeyboardManagerSwift' pod 'DropDown' pod 'DLRadioButton', '~> 1.4' pod 'ADCountryPicker', '~> 2.1.0' pod 'MDFInternationalization' pod 'SDWebImage' pod 'ProgressHUD' pod 'DatePickerDialog' pod 'PhoneNumberKit' pod 'Charts' target 'fabfinanceTests' do inherit! :search_paths # Pods for testing end target 'fabfinanceUITests' do # Pods for testing end end post_install do |installer| installer.generated_projects.each do |project| project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' end end end end
Posted
by
Post not yet marked as solved
1 Replies
7 Views
Hello everyone! I'm encountering an issue while trying to use the Sign in with Apple token revocation API. I've followed the steps outlined in the official documentation (https://developer.apple.com/documentation/sign_in_with_apple/revoke_tokens), but when I consume the API, I receive a 200 status code instead of the expected code. I've double-checked my implementation and can't find any obvious errors. Has anyone else experienced this issue before? I would greatly appreciate any suggestions or advice on how to resolve this issue. Thank you in advance for your help!
Posted
by
Post not yet marked as solved
0 Replies
8 Views
Dear Apple Community, I've been dealing with a frustrating situation for the past three months regarding my application to the Apple Development program. It's been a rollercoaster of emotions, and I'm reaching out for some assistance. TL;DR: I've received the "Complete your enrollment in the Apple Developer Program" email, but when I try to proceed with the payment, the system puts me back in the enrollment stage again. Despite numerous calls to the support center, I'm stuck in a loop and unable to move forward. Has anyone else encountered this issue? Long Version: Today, I received an email prompting me to complete my enrollment in the Apple Developer Program. However, upon attempting to do so through the Apple Developer App, I discovered that my previous enrollment had been somehow withdrawn, leaving me back at square one. Frustrated and confused, I turned to the Apple Developer Web for answers, only to find myself facing the same message. After taking a 5min break to gather my thoughts, I returned to the Apple Developer app, only to encounter another roadblock. Now, I'm being directed to enrol through the web page, despite being told previously that the process must be completed through the app. It's a super annoying and confusing situation, to say the least. I am from Australia and trying to navigate my business overseas; I've faced many different challenges. However, this experience with Apple has been particularly the most ridiculous one. I've seen many different problems over the years but this has no logic. If anyone has experienced a similar issue or has any insights to offer, I'd greatly appreciated. Thank you for your support.
Posted
by
Post not yet marked as solved
0 Replies
6 Views
There is at least one app in AppStore (Prisma: Photo Editor, Filters), that suggest 1 day of free trial, but if you accept it, your card will be charged next day for full price of year subscription, even if you already removed app from your device and canceled subscription during this free trial day. This looks like fraud. Developers refuse to take responsibility for this. Apple support chat confirms, that such situatioin is a kind of not ok, but they are not going to do anything about it at all. Is it a known issue of AppStore? Do you know other apps like this? Is there any chance for people that were forced to purchase such subscription to get a compensation? How to setup such trial and subscription settings for my app?
Posted
by
Post not yet marked as solved
0 Replies
52 Views
I have set up the app identifier in Apple developer with the document URL set up for iCloud and also updated the info.plist file and entitlements according to this. info.plist <dict> <key>iCloud.com.abc.MyApp</key> <dict> <key>NSUbiquitousContainerIsDocumentScopePublic</key> <true/> <key>NSUbiquitousContainerName</key> <string>MyApp</string> <key>NSUbiquitousContainerSupportedFolderLevels</key> <string>Any</string> </dict> </dict> <key>UIFileSharingEnabled</key> <true/> <key>LSSupportsOpeningDocumentsInPlace</key> <true/> <key>UIBackgroundModes</key> <array> <string>fetch</string> <string>remote-notification</string> </array> <key>NSUbiquitousContainersUsageDescription</key> <string>This app uses iCloud containers to store and sync documents.</string> Entitlement.plist <array> <string>iCloud.com.abc.MyApp</string> </array> <key>com.apple.developer.icloud-services</key> <array> <string>CloudDocuments</string> </array> <key>com.apple.developer.ubiquity-container-identifiers</key> <array> <string>iCloud.com.abc.MyApp</string> </array> // Then I am using iCloud for CRUD operation in the app // Code snippet { try { var iCloudDocumentsURL = NSFileManager.DefaultManager.GetUrlForUbiquityContainer(null); if (iCloudDocumentsURL != null) { var path = iCloudDocumentsURL.ToString().Replace("%C3%97", "x"); var filepath = path.Replace("file://", string.Empty).Replace("%20", " "); var destinationdirectoryPath = Path.combine(filePath,"MyAppDocuments"); if (Directory.Exists(destinationdirectoryPath)) { Directory.Delete(destinationdirectoryPath, recursive: true); } } }catch(Exception ex) { LogHandler.LogError(ex); } } But in Delete operation gives Exception -> System.IO.IOException: Access to the path '/Users/USERABC/Library/Mobile Documents/iCloudcomabc~MyApp/MyAppDocuments' is denied.
Posted
by
Post not yet marked as solved
0 Replies
49 Views
Below, I have a button designed to facilitate the purchase of a subscription, which depends on the availability of the subscription in App Store Connect. This button is visible when testing locally using a StoreKit Configuration File synced from App Store Connect, and I have linked my subscription to my app in the information section. Currently, my app is in a "waiting for review" status, and the subscription is marked as "developer action needed - rejected." However, this issue of the button not appearing persisted even when the subscription was previously in the "waiting for review" status, indicating that the problem may not be related to the subscription status. I'm encountering an issue where the 'request products' function returns no results in the TestFlight environment, even when using a sandbox Apple ID. This problem has led to repeated rejections of my app, as testers are unable to verify its functionality. What could be causing these issues? VStack { if storeVM.subscriptions.isEmpty { if storeVM.isLoading { ProgressView("Loading subscriptions...") .progressViewStyle(.circular) .scaleEffect(2.0) .padding() } else if let errorMessage = storeVM.errorMessage { Text("Error: \(errorMessage)") .foregroundColor(.red) .padding() } else { Text("No subscriptions available") .padding() } } else { ForEach(storeVM.subscriptions, id: \.id) { product in Button(action: { Task { await buy(product: product) } }) { HStack { Spacer() Text("Unlock 3-day free trial. \nThen $23.99 per year. Cancel anytime.") .font(.custom("Lora-VariableFont_wght", size: 20)) .foregroundColor(.white) .lineSpacing(5) Spacer() } } .padding() .background(Color.black.opacity(0.6)) .cornerRadius(10) .padding(.horizontal, 10) } } .onAppear { Task { await storeVM.requestProducts() } } func requestProducts() async { isLoading = true errorMessage = nil do { subscriptions = try await Product.products(for: productIds) isLoading = false } catch { print("Failed product request from App Store server: \(error)") isLoading = false errorMessage = "Failed to load products" } }
Posted
by
Post not yet marked as solved
0 Replies
42 Views
Hi, as I checked now multiple threats in the internet I cant find a solution to solve the Problems with the Apple Guidelines. Our Business Model is based on pay per user. As Apple rejected our App due to not compatible guidelines I cant figure out how to implement pay per user with InApp Purchase. Because I cannot find a solution to increate the subscriptions because you can only have 1 Subscription per Account. I cant increase the subscription amount nor adjust prices of the subscription when they invite a user for example. I really need help to figure out how to solve this type of issue. I appreciate any hints how I could solve this.
Posted
by
Post not yet marked as solved
1 Replies
54 Views
with the latest Xcode that runs with Mac OS 14.5 Developer Beta has messages with a time and date in them There are also some other fields of an indeterminate origin/type. "2024-05-06 15:37:32.383996-0500 RoomPlanExampleApp[24190:1708576] [CAMetalLayerDrawable texture] should not be called after already presenting this drawable. Get a nextDrawable instead." specifically I need to know how the string [24190:1708576] relates to a location in my application so I can act on the message. I certainly can't find the text in the "[CAMetalLayerDrawable texture]". field anywhere in the user documentation OR the Development documentation. In order for a diagnostic message to be Actionable and remedied by a user it must identify the module and source line of the initiating code and there must be accessible documentation for users to access to get an explanation of potential remedies.. This interface fails to supply enough information to diagnose the problem. The label in [CAMetalLayerDrawable texture] cannot even be found in a search of the package information attached to the Xcode Release paired with the IOS and Mac OS system releases.
Posted
by

TestFlight Public Links

Get Started

Pinned Posts

Categories

See all