There is an inconsistent issue when views are rendered from the Device Activity Report Extension. This issue is noticeable only on release versions and it works fine in debug mode.
Around 80% of the times, the Report Views return blank screen and this is only the case when a weekly/monthly filter is used. Although, it works as expected for daily report views.
My questions are:
How are all the Report Activity Views working fine in debug mode but not in release mode?
How the daily activity filter works fine in the release mode but the weekly/monthly filters don't work? Is this because of a memory limit issue in the extension?
As of now, I have the family-controls(distribution) entitlement only for the app and for the extensions I only have family-controls(development) entitlement. Do I need to request for family-controls(Distribution) entitlement even for the extensions?
I have seen threads on the forum mentioning the blank screen issue associated with the DeviceActivityReport but haven't found a solution to it. Any suggestions/feedback would be of great help, thanks.
Extensions
RSS for tagGive users access to your app's functionality and content throughout iOS and macOS using extensions.
Posts under Extensions tag
200 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
I created a new iOS app with a keyboard extension. I added a UITextView to it, but when I tap on it, it crashes somewhere in outside of my code. This is pretty much the keyboard extension template with the UITextView added:
(In KeyboardViewController):
super.viewDidLoad()
// Perform custom UI setup here
self.nextKeyboardButton = UIButton(type: .system)
self.nextKeyboardButton.setTitle(NSLocalizedString("Next Keyboard", comment: "Title for 'Next Keyboard' button"), for: [])
self.nextKeyboardButton.sizeToFit()
self.nextKeyboardButton.translatesAutoresizingMaskIntoConstraints = false
self.nextKeyboardButton.addTarget(self, action: #selector(handleInputModeList(from:with:)), for: .allTouchEvents)
self.view.addSubview(self.nextKeyboardButton)
self.nextKeyboardButton.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
self.nextKeyboardButton.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
self.textView = UITextView(frame: .zero)
guard let textView = self.textView else { return }
textView.attributedText = NSAttributedString(string: "test keyboard")
textView.translatesAutoresizingMaskIntoConstraints = false
textView.layer.borderColor = UIColor.blue.cgColor
textView.layer.borderWidth = 2
view.addSubview(textView)
NSLayoutConstraint.activate([
textView.topAnchor.constraint(equalTo: view.topAnchor, constant: 10),
textView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 10),
textView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10),
textView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 10),
])
}
What’s interesting is that in my actual app, the same code works as long as Full Access is granted for the keyboard.
From what I understand, UITextViews should work even if Full Access isn’t granted.
Has anyone had any experience with putting a UITextView into a keyboard extension not running with Ful Access?
My how things have changed! Right? I cannot even describe how much time and effort my copilot has saved me. I code with the Mac version of VSCode and have been using Pieces for Developer's - a free plugin from the VSCode Marketplace.
Talk about blown away. I've used ChatGPT for a year in my browser, even GitHub Copilot, Tabnine, Cody and others... but having the Pieces copilot integrated into my editor as well as my entire toolchain has been insane.
On top of that, the Pieces Desktop (https://pieces.app/) that comes with the plugin is free too and does absolute magical things for my workflow.
My work is transformed because my copilot is like my own employee that does my work for me in a fraction of time.
Looking to hear what copilot experiences you are enjoying. Reply with a link to what you are using. If it's better than Pieces Copilot then I'll be retiring soon!
Rich
I would like to be able to save files to the app's main document's directory from within a share sheet. Is this possible?
Thanks,
Rob
Hi,
i was playing around with the honey app for iPad and came across this dialog that appeared to prompt me to enable permissions. How would i achieve this? The button when clicked toggled system permissions
Since updating to iOS v17.4.1 our safari extension no longer functions as it used to
We are experiencing issues where our content script is not getting initialized, On devices running iOS 17.4.1, the content script included in our extension does not appear to run. There are no logs from the content script in the console, whereas on other versions and devices, it operates as expected. Our Extension relies con communication between the background and content scripts in order for us to render various popups to our users, based on our logs as of iOS 17.4.1 this communication is not successful, we can see messages being sent from the background script but as mentioned above nothing on the content script side.
This behavior happens majority of the time and on random sites, sometimes opening the same site in a new tab would work but not always. There are also times where we would only receive our popups after opening the safari menu and interacting with our extension via this menu.
Please assist with a way forward
I create two Extensions in my continer app.
Do I need create diffierent provisoning profiles for these Extensions ?
The devs really hate this things, but as a project manager I need to know the time estimates. So in development favour I really want to know the time estimate to setup and XCode project, considering project as an average case (includes complexity).
So I can really know hpow much time do they actually take or they are just giving over estimates.
when i was develop ShareExtension, and I donate a intent to share suggestion, and it appeared on my share sheet, but I launched the ShareExtension by clicked icon in suggestion list.
and i executed the following code in my project, i got nil of intent. and extensionContext is not nil.
'''self.extensionContext.intent'''
I would greatly appreciate some insight of what could be possible going wrong here. Thanks in advance!
My Safari Web Extension app for iOS sometimes exhibits an issue where the request to SafariWebExtensionHandler sometimes doesn't return.
This never happens on the simulator, and never happens when I'm actively debugging the SafariWebExtensionHandler process. It only happens on a physical device, and it only happens about 5% of the time. Note that the request happens RIGHT when the page loads (document_start), so I wonder if there's some kind of race condition happening, or a bug in iOS.
No errors are thrown, and I've pared back the logic to be extremely simple, and I still see the issue persist. I'm PRETTY sure it's the SafariWebExtensionHandler because I've tested bypassing it completely (returning a dummy response from background.js), and when I do, the issue never happens.
I've seen this issue posted before:, but without a resolution.
SafariWebExtensionHandler.m?:
- (void)beginRequestWithExtensionContext:(NSExtensionContext *)context {
NSExtensionItem *response = [[NSExtensionItem alloc] init];
response.userInfo = @{ SFExtensionMessageKey: @{
@"op2": @(YES),
@"op3": @(YES),
@"op4": @(YES),
@"op5": @(YES),
@"op6":@(YES),
@"op1": @(NO)
} };
[context completeRequestReturningItems:@[ response ] completionHandler:nil];
}
background.js (removed proprietary logic so excuse syntax errors):
browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
console.log("Received request: ", request);
if (request.action === "getUserSettings") {
var payload = JSON.stringify({cmd: "getUserSettings"});
sendMessageToNative(payload, async function(response) {
sendResponse(response);
});
return true;
}
return true;
});
content.js
browser.runtime.sendMessage({ action: "getUserSettings" }).then((response) => {
...
});
I've worked around this by waiting for a few seconds and then resending the request if I never got a response (and this workaround works!), but this results in a bad UX. So, does anyone have any tips, pointers, etc?
My company has been developing a DriverKit Extension for our ThunderBolt attached devices. Our testing has gone well on Intel based machines but it seems to be able to cause kernel panics on my M1/M2 Mac when click "Allow"
in Privacy & Security. It always crash immediately. Unfortunately it is " ApplePPMCPMS: Could not register client id 5. Error code 0xe00002bc " and I have no way to debug it. Has anyone deal with something like this?
panic(cpu 5 caller 0xfffffe002fd92b7c): "ApplePPM: virtual IOReturn ApplePPMCPMS::callPlatformFunction(const OSSymbol *, bool, void *, void *, void *, void *):2003 " "ApplePPMCPMS: Could not register client id 5. Error code 0xe00002bc\n" @ApplePPMCPMS.cpp:2003
Debugger message: panic
Memory ID: 0x6
OS release type: User
OS version: 22G90
Kernel version: Darwin Kernel Version 22.6.0: Wed Jul 5 22:22:52 PDT 2023; root:xnu-8796.141.3~6/RELEASE_ARM64_T8103
Fileset Kernelcache UUID: 593DE91B6B9F1B49F8178C99AC56A8C2
Kernel UUID: CE831117-201E-35F6-A293-FCC0F02097A3
Boot session UUID: EB9DE635-C521-4672-9251-955CEC7BC487
iBoot version: iBoot-8422.141.2
secure boot?: YES
roots installed: 0
Paniclog version: 14
KernelCache slide: 0x00000000264e4000
KernelCache base: 0xfffffe002d4e8000
Kernel slide: 0x00000000264ec000
Kernel text base: 0xfffffe002d4f0000
Kernel text exec slide: 0x00000000278a4000
Kernel text exec base: 0xfffffe002e8a8000
mach_absolute_time: 0x3b74899144
Epoch Time: sec usec
Boot : 0x66176032 0x000c0192
Sleep : 0x00000000 0x00000000
Wake : 0x00000000 0x00000000
Calendar: 0x661789be 0x0006abb4
Zone info:
Zone map: 0xfffffe10002b4000 - 0xfffffe30002b4000
. VM : 0xfffffe10002b4000 - 0xfffffe14ccf80000
. RO : 0xfffffe14ccf80000 - 0xfffffe1666918000
. GEN0 : 0xfffffe1666918000 - 0xfffffe1b335e4000
. GEN1 : 0xfffffe1b335e4000 - 0xfffffe20002b0000
. GEN2 : 0xfffffe20002b0000 - 0xfffffe24ccf7c000
. GEN3 : 0xfffffe24ccf7c000 - 0xfffffe2999c48000
. DATA : 0xfffffe2999c48000 - 0xfffffe30002b4000
Metadata: 0xfffffe3efce64000 - 0xfffffe3f04e64000
Bitmaps : 0xfffffe3f04e64000 - 0xfffffe3f06478000
Extra : 0 - 0
CORE 0 recently retired instr at 0xfffffe002ea385fc
CORE 1 recently retired instr at 0xfffffe002ea385fc
CORE 2 recently retired instr at 0xfffffe002ea385fc
CORE 3 recently retired instr at 0xfffffe002ea385fc
CORE 4 recently retired instr at 0xfffffe002ea385fc
CORE 5 recently retired instr at 0xfffffe002ea36edc
CORE 6 recently retired instr at 0xfffffe002ea385fc
CORE 7 recently retired instr at 0xfffffe002ea385fc
TPIDRx_ELy = {1: 0xfffffe166798e020 0: 0x0000000000000005 0ro: 0x0000000000000000 }
CORE 0 PVH locks held: None
CORE 1 PVH locks held: None
CORE 2 PVH locks held: None
CORE 3 PVH locks held: None
CORE 4 PVH locks held: None
CORE 5 PVH locks held: None
CORE 6 PVH locks held: None
CORE 7 PVH locks held: None
CORE 0: PC=0xfffffe002e919618, LR=0xfffffe002e90f630, FP=0xfffffe5d6457bc00
CORE 1: PC=0xfffffe002e936000, LR=0xfffffe002e936000, FP=0xfffffe5d6429bef0
CORE 2: PC=0xfffffe002eaacaa8, LR=0xfffffe002eaacae8, FP=0xfffffe5d63fe3690
CORE 3: PC=0xfffffe002e936000, LR=0xfffffe002e936000, FP=0xfffffe5d64693ef0
CORE 4: PC=0xfffffe002e92fbac, LR=0xfffffe002e914b70, FP=0xfffffe5d65befc60
CORE 5 is the one that panicked. Check the full backtrace for details.
CORE 6: PC=0x0000000199b5b5b4, LR=0x000000018c06db24, FP=0x000000016f324ff0
CORE 7: PC=0xfffffe002ef4937c, LR=0xfffffe002ef492f0, FP=0xfffffe5d657e7de0
Compressor Info: 0% of compressed pages limit (OK) and 0% of segments limit (OK) with 0 swapfiles and OK swap space
Panicked task 0xfffffe24cd09a738: 0 pages, 970 threads: pid 0: kernel_task
Panicked thread: 0xfffffe166798e020, backtrace: 0xfffffe5d643735d0, tid: 62085
lr: 0xfffffe002e8fe5fc fp: 0xfffffe5d64373650
lr: 0xfffffe002ea3e6e4 fp: 0xfffffe5d64373670
lr: 0xfffffe002ea2fe4c fp: 0xfffffe5d643736e0
lr: 0xfffffe002ea2e518 fp: 0xfffffe5d643737a0
lr: 0xfffffe002e8af7f8 fp: 0xfffffe5d643737b0
lr: 0xfffffe002e8fdee4 fp: 0xfffffe5d64373b60
lr: 0xfffffe002f07a548 fp: 0xfffffe5d64373b80
lr: 0xfffffe002fd92b7c fp: 0xfffffe5d64373d30
lr: 0xfffffe002f13c88c fp: 0xfffffe5d64373d80
lr: 0xfffffe002ef44b08 fp: 0xfffffe5d64373de0
lr: 0xfffffe002ef4c3ac fp: 0xfffffe5d64373e50
lr: 0xfffffe002ef51cc8 fp: 0xfffffe5d64373f20
lr: 0xfffffe002e8b8e98 fp: 0x0000000000000000
Kernel Extensions in backtrace:
com.apple.AGXG13G(227.7.14)[9A593B36-8560-3700-B806-A6531D4F72EC]@0xfffffe002f0be6a0->0xfffffe002f15dbbf
dependency: com.apple.driver.AppleARMPlatform(1.0.2)[5478478E-CF49-3A40-9437-4298C08DC081]@0xfffffe002f2123d0->0xfffffe002f263173
dependency: com.apple.driver.AppleMobileFileIntegrity(1.0.5)[28D5832D-79F4-3C81-AA70-0775A365BA35]@0xfffffe002fca3580->0xfffffe002fccf587
dependency: com.apple.driver.RTBuddy(1.0.0)[8695C672-1FB4-3954-A525-C10AE1CE4E57]@0xfffffe0031348720->0xfffffe003138444b
dependency: com.apple.iokit.CoreAnalyticsFamily(1)[38EC9902-05F4-3412-8CB3-1B5001455BCA]@0xfffffe00303385f0->0xfffffe0030340407
dependency: com.apple.iokit.IOGPUFamily(65.60.1)[683A153B-7683-363B-B6E8-6DC60D57D55F]@0xfffffe0030a85180->0xfffffe0030abab17
dependency: com.apple.iokit.IOReportFamily(47)[FE904E47-8D35-3152-8035-2BFA7B69A77E]@0xfffffe0030d44820->0xfffffe0030d478bf
dependency: com.apple.iokit.IOSurface(336.60.1)[64104E9B-CF29-3BAC-ABF7-134DCEE9A195]@0xfffffe0030e15d20->0xfffffe0030e450e3
dependency: com.apple.kec.Libm(1)[BA66FD46-3E12-378D-A1A3-67C765DB2A21]@0xfffffe00313313c0->0xfffffe0031334e4b
com.apple.driver.ApplePassthroughPPM(3.0)[495FD94A-224A-3C8B-B377-925FF62F0257]@0xfffffe002fd7ac40->0xfffffe002fdbb7c3
dependency: com.apple.driver.AppleARMPlatform(1.0.2)[5478478E-CF49-3A40-9437-4298C08DC081]@0xfffffe002f2123d0->0xfffffe002f263173
dependency: com.apple.driver.ApplePMGR(1)[8202FFB5-EBDB-333D-9001-9A2582407585]@0xfffffe002fd26380->0xfffffe002fd6c30f
dependency: com.apple.iokit.IOReportFamily(47)[FE904E47-8D35-3152-8035-2BFA7B69A77E]@0xfffffe0030d44820->0xfffffe0030d478bf
dependency: com.apple.kec.Libm(1)[BA66FD46-3E12-378D-A1A3-67C765DB2A21]@0xfffffe00313313c0->0xfffffe0031334e4b
last started kext at 254801217669: com.apple.filesystems.exfat 1.4 (addr 0xfffffe002de1c690, size 6208)
last stopped kext at 252590757699: com.apple.filesystems.exfat 1.4 (addr 0xfffffe002de1c690, size 6208)
I have a host application and I've added an extension to it. The bundle IDs of the two are different. Do I need to apply for a separate Provisioning Profile for the extension?
Hello,
While developing an extension for Safari using Manifest V3, I encountered an issue where my service worker stops functioning; it simply disappears, and I'm unable to revive it in any way. I've attempted to send messages from popup.js and content.js, and even tried setting an alarm with a 20-second interval. However, the worker remains unresponsive until the browser or the extension is reloaded. The logic of my extension operates through background.js (worker). What steps should I take to restore the functionality of the worker?
Thank you for your assistance.
I have a NotificationContentExtension, to create a custom view for a notification.
This view contains several links (crucially, these are not defined as .
The desired behavior is to open the url in a webview in my main app. However, using self.extensionContext.open opens the url in safari. Given that UIApplication.shared is not available in an extension, how should I go about opening a url in my main app from a notification?
We use a local swift package in 6 of our app extensions. The product from the local package that we link to each app extension is a dynamic framework. And while the dynamic framework is copied into the final app bundle once, the resource bundles of each target that comprise the dynamic framework is copied into each app extension. I'd much rather have the bundles be copied into the dynamic framework once to prevent app bloat.
Here is a visualization of the issue:
.
└── MyApp.ipa/
├── MyApp (executable)
├── MyDynamicFramework_TargetA.bundle
├── MyDynamicFramework_TargetB.bundle
├── MyDynamicFramework_TargetC.bundle
├── Frameworks/
│ └── MyDynamicFramework.framework/
│ ├── TargetA
│ ├── TargetB
│ └── TargetC
└── PlugIns/
├── Widgets.appex/
│ ├── MyDynamicFramework_TargetA.bundle
│ ├── MyDynamicFramework_TargetB.bundle
│ └── MyDynamicFramework_TargetC.bundle
├── Intents.appex/
│ ├── MyDynamicFramework_TargetA.bundle
│ ├── MyDynamicFramework_TargetB.bundle
│ └── MyDynamicFramework_TargetC.bundle
├── IntentsUI.appex/
│ ├── MyDynamicFramework_TargetA.bundle
│ ├── MyDynamicFramework_TargetB.bundle
│ └── MyDynamicFramework_TargetC.bundle
├── NotificationContent.appex/
│ ├── MyDynamicFramework_TargetA.bundle
│ ├── MyDynamicFramework_TargetB.bundle
│ └── MyDynamicFramework_TargetC.bundle
├── RichPushContent.appex/
│ ├── MyDynamicFramework_TargetA.bundle
│ ├── MyDynamicFramework_TargetB.bundle
│ └── MyDynamicFramework_TargetC.bundle
└── NotificationService.appex/
├── MyDynamicFramework_TargetA.bundle
├── MyDynamicFramework_TargetB.bundle
└── MyDynamicFramework_TargetC.bundle
Notice that the resource bundles of Target A, B, and C are copied multiple times causing an unhealthy app size.
I'd either like the resource bundles to be copied into MyDynamicFramework or copied once into the app bundle and let the app extensions reference them.
Given the SPM + Xcode linking is a black box for the most part, how would I accomplish this?
I'm working on a app that can communicate, send and receive data from our own MFi scanner.
Ideally, this app can receives data and remains communication even when it's in background, but I can only runs a background task for maximum 30 sec.
Along with this main app, we also have a keyboard extension as an interface that can publish collected data to other app that user prefers with string format.
However, It seems like Apple doesn't allow to implement UIApplication.shared.beginBackgroundTask method in extension class, is there any alternative that worth to try?
Also, can I extend app background task time elapsed to at least 30 minutes?
If I can get an official response would be great!
Hi,
I run the converter my chrome exrension to a safari extension. I'm trying to pass the device data like the MacAddress of the device and IP address of my device to background.js in my chrome extension. How do I do that?
I've tried several ways but I can't get it to work. Please help me,
Several of our users are having an issue where they cannot make or receive Teams calls from their iPhones. I believe this is an issue that began with IOS 17.2 and which Apple has acknowledged and committed to fixing.
may I know what is the status of this fix? or if there is a solution?
Any extension views called from ASCredentialProviderViewController -> open func prepareInterface(forPasskeyRegistration registrationRequest: ASCredentialRequest) cannot be accessed through Keyboard (Setting->Accessibility->Keyboards->Full Keyboard Access enabled). I have to manually type the prompted screen once to be able to get focused and continue to use Keyboard. Is it a known issue or I am missing anything? Please suggest. Thanks!
I am trying to add an extension, that adds two functions to an array of FloatingPoint types.
I added to and extension to get a myDesibe var:
extension FloatingPoint {
public var myDescribe:String {
return String(format:"%.3f",self as! CVarArg)
}
}
This works fine (or seems to)
On the collection, I want to add two methods/vars.
One method returns a string with command delimited values:
public extension Array where Element: FloatingPoint {
var myDescribe:String {
var rvalue = ""
for (index,entry) in self.enumerated() {
var format = ",%@"
if (index == 0) {
format = "%@"
}
rvalue += String(format: format, entry.myDescribe)
}
return rvalue
}
}
That seems to be working fine.
The other I wan to pass the command delimited string in, and get an array of the type of elements of the Array. This does not work:
public extension Array where Element: FloatingPoint {
var myDescribe:String {
func fromDescription(desribe:String) -> [Element] {
var rvalue = [Element]()
for entry in desribe.components(separatedBy: ",") {
let trimmed = entry.trimmingCharacters(in: .whitespaces)
let temp = FloatLiteralType(trimmed) ?? FloatLiteralType.zero
// Now, how to convert this so I can append this in the array? This is the issue!!
rvalue.append(temp) // << THIS FAILS, as it wants an Int which I don't `understand`
}
return rvalue
}
}
All help is appreciated
Charles