Post

Replies

Boosts

Views

Activity

"ITMS-90338: Non-public API usage - The app references non-public selectors" issue still present when uploading to TestFlight, except now its preventing builds from appearing
While attempting to upload my app to TestFlight (which has already been uploaded numerous times, including just a few days ago with the same code base) there is this error "TMS-90338: Non-public API usage - The app references non-public selectors in : _isKeyDown, _modifiedInput, _modifierFlags....." Nothing new there, that's been happening for months for myself and countless others and has been reported numerous times, i.e. https://developer.apple.com/forums/thread/127678?answerId=715975022#715975022 https://developer.apple.com/forums/thread/714450 But now there's a difference - in the past the builds always appeared in Testflight after getting this warning, so it wasn't an issue. But now that's changed, the build is no longer appearing in Testflight, so it suddenly is a very big issue.
3
0
935
Feb ’23
What size image should be added to a contact such that it appears in full screen mode on the incoming call screen?
I'm programmatically adding a contact with an image with the intention the image should display in full screen size when a caller matching the number of the contact calls (as opposed to the image appearing as a tiny round icon next to the caller name). I'm creating an image of the same size and scale factor as the iPhone, and so far its working out ok - I have about 15 different phones, of various dimensions and scale factors, ranging from an old iPhone mini up to the most recent iPhone Pro Max, and on all of these it works as intended. But there's an exception, an iPhone 12 Pro (which has dimensions 390 * 844 and scale factor 3), on this phone when there is a call the contact image appears as a tiny icon. Why. Why is this phone different? How can I know what size image should be added to a contact to appear at full size in the call screen when every phone has different dimensions and they are not behaving the same? Additional question - the iPhone applies some cropping and expansion to whatever image gets added, is it possible to know what's being done to the image in order to make it display perfectly? (i.e. if the image contains some text, the fact the OS crops away some of the edge of the image, then expands what's left to fill the screen dimensions results in some pixelation)
0
0
739
Feb ’23
Warnings "The app references non-public selectors" using Xcode 14 to upload to App Store Connect
Using the newly released Xcode 14 to upload an app to App Store Connect results in several warnings saying "The app references non-public selectors in ....." This does not occur when uploading if the archive is built using Xcode 13 Is this a re-emergence of an Apple bug: https://developer.apple.com/forums/thread/127678?answerId=715975022#715975022 Which has the response: "The issue has been resolved on the app validation backend. Please try resubmitting. Sorry for the trouble." Apple Developer Tools Engineer
7
2
3.7k
Feb ’23
Xcode 14.1 is unable to provision an asset download extension
This can easily be reproduced from scratch following these steps: Launch Xcode and choose to create a new iOS app. Organization name: com.company, ProductName:experiments. Therefore the bundle id is: com.company.experiments Create a background download target, productName:backgroundDownloadExtension. Therefore the bundle is is: com.company.experiments.backgroundDownloadExtension When Xcode creates the extension it automatically gives it a group capability with id: group.com.company.experiements. Within the signing & Capabilities section for the extension there is the following error: Within the developer portal, go to the Identifiers section, locate the main app bundle com.company.experiements. If not ticked, tick the App Groups capability. Click on edit, select group.com.company.experiments Within the developer portal Identifiers section, locate the extension bundle, com.company.experiments.backgroundDownloadExtension. Ensure the App Groups capability is ticked. Click on edit, select group.com.company.experiments. Like so for both the app and extension: Back in Xcode, for the app add the group capability, tick group.com.company.experiments. Now it matches the extension and will be like this for both of them: Quit and relaunch Xcode because Xcode is so unbelievably sticky and seems to cache everything, e-v-e-r-y-t-h-i-n-g, and millions of problems can be solved just by quitting/relaunching it. In the Signing & Capabilities section for the extension it still displays this: Back in the developer portal, create a provisioning profile for iOS development, choose the com.company.experiments bundle id, download it. Do likewise for the com.company.experiments.backgroundDownloadExtension After downloading, click on them both. Quit and re-lanch Xcode again. Any luck? No its still displaying the provisioning error. Ok, enough of Xcode's automatic management of signing. Let's turn that off and import the the extension provisioning profile that was just downloaded. Still getting this error: The entitlements file's contents are: <key>com.apple.security.application-groups</key> <array> <string>group.com.company.experiments</string> </array> The contents of the downloaded extension profile are: <key>Entitlements</key> <dict> <key>com.apple.security.application-groups</key> <array> <string>group.com.company.experiments</string> </array> <key>application-identifier</key> <string>MV8J9D3236.com.company.experiments.backgroundDownloadExtension</string> <key>keychain-access-groups</key> <array> <string>MV8J9D3236.*</string> <string>com.apple.token</string> </array> <key>get-task-allow</key> <true/> <key>com.apple.developer.team-identifier</key> <string>MV8J9D3236</string> </dict> I give up, how the hell can you create a background download extension without Xcode displaying the error?
3
1
1.8k
Jan ’23
How should you programatically add a contact so it remains only on the device and isn't synched to iCloud?
I want to programmatically add a contact, preferably within its own group, such that it remains only on the (iPhone) device local copy of contacts and doesn't get synched elsewhere. However if I programmatically create a group then the group itself appears in iCloud, so presumably contacts within it will to. What sort of arrangement of containers/groups/contacts etc. should I create to achieve this?
0
0
1.4k
Jan ’23
Notification Service Extension doesn't free memory between invocations
I've got a notification service extension which uses quite a lot of memory when it runs. Its using UIGraphicsImageRenderer:image() to create an image based on the push payload, and that that is a very memory hungry function. When the extension receives a push it uses less than the 25MB memory limit for extensions and its successful and runs to completion. However the next push that gets receives crashes due to memory not being freed (it doesn't matter if several minutes elapses between pushes). After its crashed its successful once more (the action of it crashing must obviously be freeing up the memory, so after a crash there's enough memory to run again, but then the next push after that will crash and so on and so on). I've run the extension interactively in Xcode's debugger to observe this behavior, but it also happens when running independently of Xcode (and thus lifetimes of things aren't being kept alive by the Xcode debugger). As my extension has no control over the creation/destruction lifecycle of UNNotificationServiceExtension, is there anything that can be done to force the OS/UNNotificationServiceExtension to fully unload and release all its resources?
0
0
829
Jan ’23
[__NSCFType set]: unrecognized selector with NSAttributedString:draw() gets called, based on width of position
If the code below is run it causes an exception 'NSInvalidArgumentException', reason: '-[__NSCFType set]: unrecognized selector sent to instance 0x283130be0' However, the exception can be removed by reducing the width value from 100.0 in positionRect, for example setting it to something like 50.0 removes the exception. But why is this? With a width value of 100.0 specified for positionRect, that's well short of the width of imageSize. And even if there is some size issue, why is there an unrecognized selector exception? let imageSize = CGSize(width: 400, height: 100) let testRenderer = UIGraphicsImageRenderer(size: imageSize) let testImage = testRenderer.image { context in context.cgContext.setFillColor(UIColor.black.cgColor) context.fill(CGRect(origin: .zero, size: imageSize)) let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.alignment = .left let attributes: [NSAttributedString.Key: Any] = [ .font: UIFont.systemFont(ofSize: 8.0), .paragraphStyle: paragraphStyle, .foregroundColor: UIColor.white.cgColor ] let attributedString = NSAttributedString(string: "This is some text", attributes: attributes) let positionRect = CGRect(x: 10, y: 10, width: 100.0, height: 8.0) attributedString.draw(with: positionRect, options: .usesLineFragmentOrigin, context: nil) }
1
0
1.5k
Jan ’23
A small number of testers never receive Testflight invites/redemption codes
There's about 20 internal testers on our Testflight account, but a couple of them just never ever receive the invites/redemption codes so its impossible to get them set set up to be able to test the app. They are added to the Internal Testing App Store Connect Users group, and I've also tried creating a new group and adding them to that as well as and instead of the App Store Connect Users group. These groups are added as testers of builds, and for the other 20 users their status says "Installed" but for a couple of testers their status always shows as "Invited Resend Invite". The problem is, even if I click on Resend Invite an infinite number of times, these testers never receive anything. Never. Not after waiting an hour, 10 hours, a day, a week, a month. Click on click on click on Resend Invite and it does nothing, they never get anything. No emails are not going into their trash/spam folder. I've tried deleting the testers entirely from the entire developer account, and then when I re-add them back, then in that case they do get an email inviting them to join the developer account, but then they don't subsequently receive a TestFlight invite / code when added to a build. The internal testers are all members of the same organization, so all have the same form of email address which is being used. 20 or 30 or them its ok, but for a couple of testers Testflight just hates them. For one user, we tried everything and spent literally weeks, just was never ever able to get them set up and eventually had to give up. Our IT department had to specially create a new email for them, just to try and get them added to TestFlight. Hey and guess what, the new email worked, while the old one never did. But this isn't a solution, can't ask the IT dept to create new emails, and shouldn't have to. But now the same thing is happening again to another tester. Why does clicking Resend Invite not do anything? How can I force things and get this tester to receive an invite?
0
0
766
Dec ’22
Is it possible to catch a memory exception in an extension?
I've got a notification service extension with quite a lot going on, and consequently I've been running out of memory. One thing in particular that is using a lot of memory is UIGraphicsImageRenderer which I'm using to construct an image at run time the size of the device's bounds. Running the extension in Xcode and profiling its memory it appears that using autoreleasepool {} doesn't seem to always release memory instantly, so if you do A and then B, and combined they have too much memory usage for the extension to handle, trying to autorelease A doesn't actually always release the memory before B (unlike if the code is running in the main app rather than an extension). A few questions is there any way of programmatically detecting the memory usage / memory limit within the extension? if the extension goes over the 24Mg limit, is there any way of catching that exception and handling it somehow? is there a way of ensuring/forcing autoreleasepool{} to clear memory before proceeding with further code?
1
1
815
Dec ’22
What size image to programmatically add to a contact such that it'll appear on the call screen nicely?
I want to programmatically create a contact with an image with the result that when the iPhone receives a call from the number associated with that contact its image will appear on the incoming call screen (occupying the full screen, not the little tiny icon variation). But I'm having a hell of a job trying to figure out what dimensions should be used for the image to add to the contact. If on the iPhone I take a screenshot and add that manually to a contact then make a call, then the call screen more or less displays the entire screenshot almost the same as the actual desktop. The call screen appears to be slightly magnifying the image. So whatever size the screenshot is should be close enough for the contact image. I've got an iPhone 14 pro and its UIScreen.main.bounds is 932 by 430. If I export an iPhone screenshot to a Mac, I can see its image size is 2796 by 1290, which is exactly 3 times the bounds size. So I created an image of size 2796 by 1290 and programmatically added it to a contact (using CNMutableContact.imageData = myUIImage.pngData(). But when a call arrives the image that gets displayed on the call screen is way way way out of whack and alignment. Same too if I add am image of size 932 by 430 (i.e. without the 3 times factor). I've done lots of experiments but I just can't figure out what size image I should add to the contact. Does anybody happen to know? (I exported the contact where I manually added the screenshot image as a .vcf to see what image size they use, but it doesn't export the full image that's actually displayed during a call screen, it just exports a truncation of the full image which is a square of 1200 by 1200.)
0
0
962
Dec ’22
Why is the VoIP background mode capability still present in Xcode when it was deprecated in iOS 10?
There's lots of material on the internet talking about how the VoIP background mode capability was deprecated in iOS 10. And yet its still presented as an option in the latest version of Xcode and it still appears in Apple's documentation https://developer.apple.com/documentation/xcode/configuring-background-execution-modes The documentation states: The app provides Voice over IP services and requires automatic launch after system restart. For more information, see the CallKit framework. It seems apps used to be able to be launched on restart prior to iOS 10, but since then they can't. So is the documentation for this area out of date and wrong? If its been deprecated for so long, why is it still documented and possible to add it to an application?
1
0
1.1k
Dec ’22
What is a ballpark level of effort develop the code to enable an app to receive a VoIP call?
Whenever one googles for VoIP and iOS there's always a lot of results that appear that tell you about using CallKit. However CallKit on its own is useless, it just provides a GUI/OS integration of VoIP, but not the actual SIP nor VoIP things themselves. There's lots of 3rd party libraries out that, however they all include licensing, or paying a fee, and are tied to the 3rd party's servers. Approximately how much effort is it to develop from scratch in Swift code to enable an app to receive VoIP calls (it doesn't need to make outgoing VoIP calls, and and only audio, not video needs to be supported). Here's what I think would be involved: Send information from the app to a SIP registrar. How difficult is this? Enable VoIP push handling in the app, send the Voip Push token to a server. Handle incoming VoIP push. Implement the VoIP transport, audio handling etc., for incoming VoIP Integrate with the OS I know how to do 2, and for 4 there's loads of tutorials on CallKit. What I'd like to determine is what is involved and a level of effort for implementing 1) and 3) without using a 3rd framework. Anybody done this themselves and has a rough idea?
0
0
797
Nov ’22
How can a notification service extension receive a VoIP push? (as opposed to receiving a non-VoIP push)
0 If a voip push (i.e. a push with a topic of com.company.app.voip as the push topic) is sent to a handset then it is delivered directly to the app via: pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type withCompletionHandler: If the app has a notification service extension, and the push payload contains mutable-content, and if the app is terminated, then the app gets launched in the background and the push still is delivered directly to the app, it does not get delivered to the extension. If the push topic is changed to be just com.company.app (and provided the payload contains the mutable-content flag) then in that case it gets delivered to the extension. However now it's no longer a voip push, it's just a regular push, because the topic no longer contains the .voip suffix. So how can things be configured whereby a voip push gets delivered to a notification service extension? Because that's what the Apple documentation says: Call this method when your notification service extension receives an encrypted VoIP call request. From: https://developer.apple.com/documentation/callkit/cxprovider/3727263-reportnewincomingvoippushpayload How is that possible, how can a notification service extension receive an encrypted VoIP call request like it mentions in the documentation?
1
0
1.6k
Nov ’22
Can VoIP call's be "Blocked" on the handset?
CallKit provides the ability to block regular calls via the call extension. And CallKit also provides the ability to integrate VoIP calls with the phone's call screen/user experience etc. However the blocking aspect of CallKit seems to have no bearing on the VoIP aspect. When the app receives a Voip Push it has to call CXProvider.reportNewIncomingCall() and that displays a call screen. If the parameters passed to reportNewIncommingCall() a handle of the .phone with a phone number registered for blocking with CallKit, the call screen still displays. Its not use to call CXProvider.invalidate() immediately because the call screen will still display, though its only displayed for a brief time its still very very obvious and noticeable. Therefore there appears to be no way of "blocking" the call, blocking is in quotes because from the user's perspective you would not expect to see the call screen, but is there is no way of stopping it from appearing, even if that appearance is only brief?
0
0
676
Nov ’22
"ITMS-90338: Non-public API usage - The app references non-public selectors" issue still present when uploading to TestFlight, except now its preventing builds from appearing
While attempting to upload my app to TestFlight (which has already been uploaded numerous times, including just a few days ago with the same code base) there is this error "TMS-90338: Non-public API usage - The app references non-public selectors in : _isKeyDown, _modifiedInput, _modifierFlags....." Nothing new there, that's been happening for months for myself and countless others and has been reported numerous times, i.e. https://developer.apple.com/forums/thread/127678?answerId=715975022#715975022 https://developer.apple.com/forums/thread/714450 But now there's a difference - in the past the builds always appeared in Testflight after getting this warning, so it wasn't an issue. But now that's changed, the build is no longer appearing in Testflight, so it suddenly is a very big issue.
Replies
3
Boosts
0
Views
935
Activity
Feb ’23
What size image should be added to a contact such that it appears in full screen mode on the incoming call screen?
I'm programmatically adding a contact with an image with the intention the image should display in full screen size when a caller matching the number of the contact calls (as opposed to the image appearing as a tiny round icon next to the caller name). I'm creating an image of the same size and scale factor as the iPhone, and so far its working out ok - I have about 15 different phones, of various dimensions and scale factors, ranging from an old iPhone mini up to the most recent iPhone Pro Max, and on all of these it works as intended. But there's an exception, an iPhone 12 Pro (which has dimensions 390 * 844 and scale factor 3), on this phone when there is a call the contact image appears as a tiny icon. Why. Why is this phone different? How can I know what size image should be added to a contact to appear at full size in the call screen when every phone has different dimensions and they are not behaving the same? Additional question - the iPhone applies some cropping and expansion to whatever image gets added, is it possible to know what's being done to the image in order to make it display perfectly? (i.e. if the image contains some text, the fact the OS crops away some of the edge of the image, then expands what's left to fill the screen dimensions results in some pixelation)
Replies
0
Boosts
0
Views
739
Activity
Feb ’23
Warnings "The app references non-public selectors" using Xcode 14 to upload to App Store Connect
Using the newly released Xcode 14 to upload an app to App Store Connect results in several warnings saying "The app references non-public selectors in ....." This does not occur when uploading if the archive is built using Xcode 13 Is this a re-emergence of an Apple bug: https://developer.apple.com/forums/thread/127678?answerId=715975022#715975022 Which has the response: "The issue has been resolved on the app validation backend. Please try resubmitting. Sorry for the trouble." Apple Developer Tools Engineer
Replies
7
Boosts
2
Views
3.7k
Activity
Feb ’23
Xcode 14.1 is unable to provision an asset download extension
This can easily be reproduced from scratch following these steps: Launch Xcode and choose to create a new iOS app. Organization name: com.company, ProductName:experiments. Therefore the bundle id is: com.company.experiments Create a background download target, productName:backgroundDownloadExtension. Therefore the bundle is is: com.company.experiments.backgroundDownloadExtension When Xcode creates the extension it automatically gives it a group capability with id: group.com.company.experiements. Within the signing & Capabilities section for the extension there is the following error: Within the developer portal, go to the Identifiers section, locate the main app bundle com.company.experiements. If not ticked, tick the App Groups capability. Click on edit, select group.com.company.experiments Within the developer portal Identifiers section, locate the extension bundle, com.company.experiments.backgroundDownloadExtension. Ensure the App Groups capability is ticked. Click on edit, select group.com.company.experiments. Like so for both the app and extension: Back in Xcode, for the app add the group capability, tick group.com.company.experiments. Now it matches the extension and will be like this for both of them: Quit and relaunch Xcode because Xcode is so unbelievably sticky and seems to cache everything, e-v-e-r-y-t-h-i-n-g, and millions of problems can be solved just by quitting/relaunching it. In the Signing & Capabilities section for the extension it still displays this: Back in the developer portal, create a provisioning profile for iOS development, choose the com.company.experiments bundle id, download it. Do likewise for the com.company.experiments.backgroundDownloadExtension After downloading, click on them both. Quit and re-lanch Xcode again. Any luck? No its still displaying the provisioning error. Ok, enough of Xcode's automatic management of signing. Let's turn that off and import the the extension provisioning profile that was just downloaded. Still getting this error: The entitlements file's contents are: <key>com.apple.security.application-groups</key> <array> <string>group.com.company.experiments</string> </array> The contents of the downloaded extension profile are: <key>Entitlements</key> <dict> <key>com.apple.security.application-groups</key> <array> <string>group.com.company.experiments</string> </array> <key>application-identifier</key> <string>MV8J9D3236.com.company.experiments.backgroundDownloadExtension</string> <key>keychain-access-groups</key> <array> <string>MV8J9D3236.*</string> <string>com.apple.token</string> </array> <key>get-task-allow</key> <true/> <key>com.apple.developer.team-identifier</key> <string>MV8J9D3236</string> </dict> I give up, how the hell can you create a background download extension without Xcode displaying the error?
Replies
3
Boosts
1
Views
1.8k
Activity
Jan ’23
How should you programatically add a contact so it remains only on the device and isn't synched to iCloud?
I want to programmatically add a contact, preferably within its own group, such that it remains only on the (iPhone) device local copy of contacts and doesn't get synched elsewhere. However if I programmatically create a group then the group itself appears in iCloud, so presumably contacts within it will to. What sort of arrangement of containers/groups/contacts etc. should I create to achieve this?
Replies
0
Boosts
0
Views
1.4k
Activity
Jan ’23
Notification Service Extension doesn't free memory between invocations
I've got a notification service extension which uses quite a lot of memory when it runs. Its using UIGraphicsImageRenderer:image() to create an image based on the push payload, and that that is a very memory hungry function. When the extension receives a push it uses less than the 25MB memory limit for extensions and its successful and runs to completion. However the next push that gets receives crashes due to memory not being freed (it doesn't matter if several minutes elapses between pushes). After its crashed its successful once more (the action of it crashing must obviously be freeing up the memory, so after a crash there's enough memory to run again, but then the next push after that will crash and so on and so on). I've run the extension interactively in Xcode's debugger to observe this behavior, but it also happens when running independently of Xcode (and thus lifetimes of things aren't being kept alive by the Xcode debugger). As my extension has no control over the creation/destruction lifecycle of UNNotificationServiceExtension, is there anything that can be done to force the OS/UNNotificationServiceExtension to fully unload and release all its resources?
Replies
0
Boosts
0
Views
829
Activity
Jan ’23
[__NSCFType set]: unrecognized selector with NSAttributedString:draw() gets called, based on width of position
If the code below is run it causes an exception 'NSInvalidArgumentException', reason: '-[__NSCFType set]: unrecognized selector sent to instance 0x283130be0' However, the exception can be removed by reducing the width value from 100.0 in positionRect, for example setting it to something like 50.0 removes the exception. But why is this? With a width value of 100.0 specified for positionRect, that's well short of the width of imageSize. And even if there is some size issue, why is there an unrecognized selector exception? let imageSize = CGSize(width: 400, height: 100) let testRenderer = UIGraphicsImageRenderer(size: imageSize) let testImage = testRenderer.image { context in context.cgContext.setFillColor(UIColor.black.cgColor) context.fill(CGRect(origin: .zero, size: imageSize)) let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.alignment = .left let attributes: [NSAttributedString.Key: Any] = [ .font: UIFont.systemFont(ofSize: 8.0), .paragraphStyle: paragraphStyle, .foregroundColor: UIColor.white.cgColor ] let attributedString = NSAttributedString(string: "This is some text", attributes: attributes) let positionRect = CGRect(x: 10, y: 10, width: 100.0, height: 8.0) attributedString.draw(with: positionRect, options: .usesLineFragmentOrigin, context: nil) }
Replies
1
Boosts
0
Views
1.5k
Activity
Jan ’23
A small number of testers never receive Testflight invites/redemption codes
There's about 20 internal testers on our Testflight account, but a couple of them just never ever receive the invites/redemption codes so its impossible to get them set set up to be able to test the app. They are added to the Internal Testing App Store Connect Users group, and I've also tried creating a new group and adding them to that as well as and instead of the App Store Connect Users group. These groups are added as testers of builds, and for the other 20 users their status says "Installed" but for a couple of testers their status always shows as "Invited Resend Invite". The problem is, even if I click on Resend Invite an infinite number of times, these testers never receive anything. Never. Not after waiting an hour, 10 hours, a day, a week, a month. Click on click on click on Resend Invite and it does nothing, they never get anything. No emails are not going into their trash/spam folder. I've tried deleting the testers entirely from the entire developer account, and then when I re-add them back, then in that case they do get an email inviting them to join the developer account, but then they don't subsequently receive a TestFlight invite / code when added to a build. The internal testers are all members of the same organization, so all have the same form of email address which is being used. 20 or 30 or them its ok, but for a couple of testers Testflight just hates them. For one user, we tried everything and spent literally weeks, just was never ever able to get them set up and eventually had to give up. Our IT department had to specially create a new email for them, just to try and get them added to TestFlight. Hey and guess what, the new email worked, while the old one never did. But this isn't a solution, can't ask the IT dept to create new emails, and shouldn't have to. But now the same thing is happening again to another tester. Why does clicking Resend Invite not do anything? How can I force things and get this tester to receive an invite?
Replies
0
Boosts
0
Views
766
Activity
Dec ’22
Is it possible to catch a memory exception in an extension?
I've got a notification service extension with quite a lot going on, and consequently I've been running out of memory. One thing in particular that is using a lot of memory is UIGraphicsImageRenderer which I'm using to construct an image at run time the size of the device's bounds. Running the extension in Xcode and profiling its memory it appears that using autoreleasepool {} doesn't seem to always release memory instantly, so if you do A and then B, and combined they have too much memory usage for the extension to handle, trying to autorelease A doesn't actually always release the memory before B (unlike if the code is running in the main app rather than an extension). A few questions is there any way of programmatically detecting the memory usage / memory limit within the extension? if the extension goes over the 24Mg limit, is there any way of catching that exception and handling it somehow? is there a way of ensuring/forcing autoreleasepool{} to clear memory before proceeding with further code?
Replies
1
Boosts
1
Views
815
Activity
Dec ’22
What size image to programmatically add to a contact such that it'll appear on the call screen nicely?
I want to programmatically create a contact with an image with the result that when the iPhone receives a call from the number associated with that contact its image will appear on the incoming call screen (occupying the full screen, not the little tiny icon variation). But I'm having a hell of a job trying to figure out what dimensions should be used for the image to add to the contact. If on the iPhone I take a screenshot and add that manually to a contact then make a call, then the call screen more or less displays the entire screenshot almost the same as the actual desktop. The call screen appears to be slightly magnifying the image. So whatever size the screenshot is should be close enough for the contact image. I've got an iPhone 14 pro and its UIScreen.main.bounds is 932 by 430. If I export an iPhone screenshot to a Mac, I can see its image size is 2796 by 1290, which is exactly 3 times the bounds size. So I created an image of size 2796 by 1290 and programmatically added it to a contact (using CNMutableContact.imageData = myUIImage.pngData(). But when a call arrives the image that gets displayed on the call screen is way way way out of whack and alignment. Same too if I add am image of size 932 by 430 (i.e. without the 3 times factor). I've done lots of experiments but I just can't figure out what size image I should add to the contact. Does anybody happen to know? (I exported the contact where I manually added the screenshot image as a .vcf to see what image size they use, but it doesn't export the full image that's actually displayed during a call screen, it just exports a truncation of the full image which is a square of 1200 by 1200.)
Replies
0
Boosts
0
Views
962
Activity
Dec ’22
No download dSYM in Testflight. Again!
This is a problem that has occurred, been fixed, occurred, been fixed.... multiple times over the years. And its happening again - there's no option to download dSYMS from Testflight/App Store. Apple, can please sort this out. Again.
Replies
4
Boosts
4
Views
1.7k
Activity
Dec ’22
Why is the VoIP background mode capability still present in Xcode when it was deprecated in iOS 10?
There's lots of material on the internet talking about how the VoIP background mode capability was deprecated in iOS 10. And yet its still presented as an option in the latest version of Xcode and it still appears in Apple's documentation https://developer.apple.com/documentation/xcode/configuring-background-execution-modes The documentation states: The app provides Voice over IP services and requires automatic launch after system restart. For more information, see the CallKit framework. It seems apps used to be able to be launched on restart prior to iOS 10, but since then they can't. So is the documentation for this area out of date and wrong? If its been deprecated for so long, why is it still documented and possible to add it to an application?
Replies
1
Boosts
0
Views
1.1k
Activity
Dec ’22
What is a ballpark level of effort develop the code to enable an app to receive a VoIP call?
Whenever one googles for VoIP and iOS there's always a lot of results that appear that tell you about using CallKit. However CallKit on its own is useless, it just provides a GUI/OS integration of VoIP, but not the actual SIP nor VoIP things themselves. There's lots of 3rd party libraries out that, however they all include licensing, or paying a fee, and are tied to the 3rd party's servers. Approximately how much effort is it to develop from scratch in Swift code to enable an app to receive VoIP calls (it doesn't need to make outgoing VoIP calls, and and only audio, not video needs to be supported). Here's what I think would be involved: Send information from the app to a SIP registrar. How difficult is this? Enable VoIP push handling in the app, send the Voip Push token to a server. Handle incoming VoIP push. Implement the VoIP transport, audio handling etc., for incoming VoIP Integrate with the OS I know how to do 2, and for 4 there's loads of tutorials on CallKit. What I'd like to determine is what is involved and a level of effort for implementing 1) and 3) without using a 3rd framework. Anybody done this themselves and has a rough idea?
Replies
0
Boosts
0
Views
797
Activity
Nov ’22
How can a notification service extension receive a VoIP push? (as opposed to receiving a non-VoIP push)
0 If a voip push (i.e. a push with a topic of com.company.app.voip as the push topic) is sent to a handset then it is delivered directly to the app via: pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type withCompletionHandler: If the app has a notification service extension, and the push payload contains mutable-content, and if the app is terminated, then the app gets launched in the background and the push still is delivered directly to the app, it does not get delivered to the extension. If the push topic is changed to be just com.company.app (and provided the payload contains the mutable-content flag) then in that case it gets delivered to the extension. However now it's no longer a voip push, it's just a regular push, because the topic no longer contains the .voip suffix. So how can things be configured whereby a voip push gets delivered to a notification service extension? Because that's what the Apple documentation says: Call this method when your notification service extension receives an encrypted VoIP call request. From: https://developer.apple.com/documentation/callkit/cxprovider/3727263-reportnewincomingvoippushpayload How is that possible, how can a notification service extension receive an encrypted VoIP call request like it mentions in the documentation?
Replies
1
Boosts
0
Views
1.6k
Activity
Nov ’22
Can VoIP call's be "Blocked" on the handset?
CallKit provides the ability to block regular calls via the call extension. And CallKit also provides the ability to integrate VoIP calls with the phone's call screen/user experience etc. However the blocking aspect of CallKit seems to have no bearing on the VoIP aspect. When the app receives a Voip Push it has to call CXProvider.reportNewIncomingCall() and that displays a call screen. If the parameters passed to reportNewIncommingCall() a handle of the .phone with a phone number registered for blocking with CallKit, the call screen still displays. Its not use to call CXProvider.invalidate() immediately because the call screen will still display, though its only displayed for a brief time its still very very obvious and noticeable. Therefore there appears to be no way of "blocking" the call, blocking is in quotes because from the user's perspective you would not expect to see the call screen, but is there is no way of stopping it from appearing, even if that appearance is only brief?
Replies
0
Boosts
0
Views
676
Activity
Nov ’22