I am on a fresh install of Xcode 15.3 on macOS 14.4 (23E214). I created an iMessage App template and signed it with my personal team's certificate. When I click the run button, it successfully builds and opens the simulator to the Messages app but does not open the compact extension view (or install the extension such that it shows up in the More messages extension list). This reproduces on my older laptop (same version of Xcode) as well as my friend's (also same version of Xcode).
Of note:
The IceCreamBuilder app installs and runs correctly with no modifications
I have not provided any icons for the messages extension
The iMessage App template comes with an empty main app that does not install on the home screen
The only console output that seems to differ from when I run the IceCreamBuilder is this message, which appears after a couple seconds of running the project:
unhandled process MobileSMS
Type: Error | Timestamp: 2024-03-09 00:41:07.763631-05:00 | Process: MobileSMS | Library: CoreParsec | Subsystem: com.apple.parsec | Category: CoreParsec | TID: 0xff097
Hi all,
I'm working on a small PoC to get Content Filtering (FilterDataProvider) working on macOS without any user interaction.
So far, I've pushed two payloads to my machine using user-approved MDM enrollment:
com.apple.system-extension-policy
com.apple.webcontent-filter
The application containing the network extension is present in /Applications.
The installation of the profiles both succeed and I can see a Content Filter is created in the Network section of System Settings. Even the status says "Enabled", but the dot remains orange.
Inspecing the system logs (specifically: filtering on process:neagent) shows me the following error:
1. Failed to find a com.apple.networkextension.filter-data extension inside of app com.my.app.containing.the.ext
Only when I submit an activation request using OSSystemExtensionRequest.activationRequest, the network extension starts (without prompts, as expected) and everything works.
Is this expected behaviour? Do I need to submit an activation request through code regardless of the fact that MDM pre-approved the System Extension prompts and created the Content Filter in the System Settings?
I got a new MacBook and set it up as a new one, not transferring any data from the old one.
But now the Apple Watch (Series 6) paired with my iPhone (14 Pro Max) ist not shown in Xcode.
iPhone and Watch are using the latest RC and also Xcode is the latest RC.
But in Xcode I ca only see my iPhone, not the paired Watch.
See Screenshots. The first shows the new MacBook and the second the old one.
I already tried a lot, but nothing helps:
Unpair Watch from Phone and then pair it again
Plug the iPhone to different USB ports
Restart Watch, iPhone and Mac
Delete the iPhone from Xcode
Enable and disable Developer Mode on iPhone and Watch
What else can I try to get the Watch back?
We're trying to make our Content Filter solution work on Shared iPads. We leverage the Network Extension framework, more specifically the Content Filter Providers.
On regular, 1:1 iPads, this works perfectly fine. However, on Shared iPads we see some weird behaviour.
Upon logging in with a MAID everything initially seems fine. However, in about 5 to 10 seconds the user is automatically logged out and an error indicating "a connection to iCloud could not be made" is presented to the user.
After investigating the logs it turns out this is caused by the fact that the network is unreachable. For example:
Jan 19 00:33:04 cloudd(CFNetwork)[5867] <Error>: Task <F5DC7C46-422D-4265-A364-B3C859BF6291>.<1> finished with error [-1009] Error Domain=NSURLErrorDomain Code=-1009 UserInfo={_kCFStreamErrorCodeKey=50, NSUnderlyingError=0xefe89ffc0 {Error Domain=kCFErrorDomainCFNetwork Code=-1009 UserInfo={_NSURLErrorNWPathKey=unsatisfied (Path was denied by NECP policy), interface: en0[802.11], ipv4, dns, uses wifi, _kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=<private>, _NSURLErrorRelatedURLSessionTaskErrorKey=<private>, NSLocalizedDescription=<private>, NSErrorFailingURLStringKey=<private>, NSErrorFailingURLKey=<private>, _kCFStreamErrorDomainKey=1}
Test device:
iPad Pro (11-inch) running iPadOS 17.2 (21C62)
My assumption:
It looks like the filter providers start "too late". In the meantime the device is trying to reach the network, but since there is a Content Filter configuration in place all traffic is denied until the extension is started (and the completionHandler has been called with a nil error).
I can see in the logs that, about 5 seconds after the home screen is visible, the Content Filter Providers are starting:
...
Jan 19 00:52:54 neagent(NetworkExtension)[7086] <Notice>: Extension request with data extension <our filterData bundle ID> started with identifier 63576D2C-A484-4D07-9753-ADC99BFDB7A6
...
Jan 19 00:52:55 neagent(NetworkExtension)[7086] <Notice>: Extension request with control extension <our filterControl bundle ID> started with identifier 51D19516-C860-48B8-AB83-0F43D5F613CB
...
Is my assumption correct? Are the Content Filter provider even officially supported by Apple on Shared iPads? Is there anything we can do to fix this issue?
Hi!
I would like to release my app in the EU, and I would be classified as trader.
Thereby I have to hand over some data like address, phone number etc.
My question is: can I use a VoIP number as phone number? I'm just concerned about the sms verification.
Much appreciated!
Hi everybody,
I'm trying to implement Firebase messaging into a new iOS app.
I've done everything (add Background Mode and Push Notification capabilities, import my key into FIrebass, ...) as describe in different tutorials that I founded on internet.
The fact is that the console doesn't show me a token..
Does someone has an idea ?
Here's my code :
// pushnotifApp.swift
// pushnotif
//
// Created by Thibault COLLIN on 13/05/2024.
//
import SwiftUI
import FirebaseCore
import FirebaseMessaging
import UserNotifications
class AppDelegate: NSObject, UIApplicationDelegate, MessagingDelegate, UNUserNotificationCenterDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Application did finish launching")
FirebaseApp.configure()
Messaging.messaging().delegate = self
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { (granted, error) in
if granted {
print("Notification authorization granted")
DispatchQueue.main.async {
application.registerForRemoteNotifications()
}
} else {
print("Notification authorization denied")
}
}
return true
}
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
print("Firebase registration token received: \(String(describing: fcmToken))")
}
}
@main
struct pushnotifApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
And the console result :
Application did finish launching
10.26.0 - [FirebaseMessaging][I-FCM001000] FIRMessaging Remote Notifications proxy enabled, will swizzle remote notification receiver handlers. If you'd prefer to manually integrate Firebase Messaging, add "FirebaseAppDelegateProxyEnabled" to your Info.plist, and set it to NO. Follow the instructions at:
https://firebase.google.com/docs/cloud-messaging/ios/client#method_swizzling_in_firebase_messaging
to ensure proper integration.
Notification authorization granted
Hello,
I'm working on an app that makes use of Screen Time features by leveraging the Family Controls, Device Activity and Managed Settings frameworks.
The main app works fine by shielding/unshielding apps with a toggle.
When it comes to monitoring the time intervals with the Device Activity Monitor (DAM) extension (e.g. lock X apps for Y minutes), I'm experiencing several issues.
To shield/unshield apps and kick off the monitoring I perform the following instructions:
let timeInMinutes = 15
let startDate = Date(timeIntervalSinceNow: 1.0) // padding added to avoid invalid DAM ranges < 15 mins.
let endDate = startDate.addingTimeInterval(timeInMinutes * 60.0)
let components: Set<Calendar.Component> = [.day, .month, .year, .hour, .minute, .second]
let calendar = Calendar.current
let intervalStart = calendar.dateComponents(components, from: startDate)
let intervalEnd = calendar.dateComponents(components, from: endDate)
let schedule = DeviceActivitySchedule(intervalStart: intervalStart, intervalEnd: intervalEnd, repeats: false)
try deviceActivityCenter.startMonitoring(.definiteShield, during: schedule)
let managedSettingsStore = ManagedSettingsStore()
managedSettingsStore.shield.applications = selection.applicationTokens // `selection` being an instance of `FamilyActivitySelection`
The main pain points are:
After this code is performed, I would expect the Device Activity Monitor extension to start, or at least to start once I go to background. To check whether the DAM extension is running or not, I attach to the extension process manually (Product > Attach to Process by PID or Name). But I can see the extension correctly running only after 3-4 attempts of calling startMonitoring.
Even when the DAM extension runs, intervalDidStart and intervalDidEnd methods in the extension are called quite randomly - most of the times not being called at all - thus making the extension hugely unaffordable.
Please note:
I already ask for Screen Time permissions during the onboarding by calling AuthorizationCenter.shared.requestAuthorization(for: .individual), so by the time the user shields the apps, these permissions are already granted.
I already have Family Control entitlements for development and distribution, and for both the main target and the DAM extension target.
In the intervalDidEnd method, I simply call ManagedSettingsStore().clearAllSettings() and DeviceActivityCenter().stopMonitoring(). This looks like to be enough to stay way below the 6MB memory limit.
Am I doing something wrong, is there a way to fix this, or is just the Device Activity framework that is unstable?
I am unsure what happened, but almost all my documents are missing from multiple folders on my Mac and cloud. I have reviewed all the diagnostics posted on the Apple websites and Q and A to recover it. Everything I have tried.
When I can find some of those documents listed (some being Excel spreadsheets) in their app and try to open them, it says that the file has been deleted or is currently not accessible. All of these documents were saved on my desktop, and I searched the computer far and wide, downloaded recovery apps to find them, and found nothing. I am not even sure how they disappeared. I tried updating my Mac to the newest software. As I read, they may appear after that, but there is still nothing.
I've added my Vendor ID to the appropriate entitlement files but my binary fails validation when trying to upload it to the store for distribution. The embeded.mobileprovision file in the generated archive shows an asterisk instead of my approved Vendor ID. How can I make sure the embedded provisioning file has my Vendor ID?
Hey there,
I'm trying to decode an json with an dynamic dict as value.
eg.
"results": [
{
"id": 1799,
"created_at": "2024-05-09T14:21:13.289655Z",
"updated_at": "2024-05-10T11:54:25.484537Z",
"email": "test@test.testh",
"name": "Test",
"attributes": {
"name": {
"firstname": "max",
"lastname": "mustermann"
},
"anboolen": false,
"anNumber": 1,
"anString": "Test"
}
}
]
The dictionary "attributes" is always an dictionary but the content inside could be everything.
for the container of results I already created an struct and using JSONDecoder to decode, but now I have the issue with the attributes part.
Can anyone help me with this issue?
Thanks in advance!
Hello everyone
My goal is to create Apple's activity ring sparkle effect. So I found Paul Hudson's Vortex library. There is already a sparkle effect, but I don't know how to modify it to achieve my goal. Because I'm pretty new to SwiftUI animations. Does anyone have any idea how I could do this?
Vortex project: https://github.com/twostraws/Vortex
I am running two different background modes(not at the same time), 1 with a workout and 1 with a location. I noticed that the app logo appears above the watch face for both background modes but does not show up consistently. I wonder what the significance of the logo showing up above watch face is? Additionally why does it show up sometimes but not others?
Thanks
Watch model: A2985
Watch system: 10.4(21T216)
Settings > Privacy can not find Developer Mode in Watch OS 10.4. xcode Recent device can not find this watch device.How do I turn on developer mode in Watch OS 10.4。Watch OS 9.5 can find and open it,but Watch OS 10.4 can not find。
I look forward to hearing from you soon.
Hi,
My app launches with a mixed immersive space. the Preferred Default Scene Session Role is set to Immersive Space Application Session Role.
ImmersiveSpace(id: "sceneSpace"){
ImmersiveView()
.environmentObject(modelObject)
}.immersionStyle(selection: .constant(.mixed), in: .mixed)
Other WindowGroups are opened too.
Problem:
When the x button (bottom left corner) is tapped on any WindowGroup the immersive space is dismissed.
When the user opens the app again the immersive space is gone.
The same happens when the user opens the Home Screen.
How can I keep the same immersive space when the app is opened again.
Thank you!
Steps to reproduce:
Connect iPhone to a Bluetooth keyboard, and enable "Full Keyboard Access" in settings
Got to https://material.angular.io/components/select/examples
Open any dropdown and use keyboard to tab away
Focus moved to the next control and dropdown panel is still open
Expected Behavior:
Dropdown should be collapsed when user tabs away using keyboard
Hi,
How to change title, subtitle, primaryButtonLabel, secondaryButtonLabel values according to iPhone language?
I noticed that the Shield Configuration Extension only runs once, when I turn on shield. Currently I can't find a way to run the Shield Configuration Extension again.
Thanks!
Guideline 5.2.3 - Legal
Your app contains content or features that may violate the rights of one or more third parties. Specifically, your app provides potentially unauthorized access to third-party audio or video streaming, catalogs, and discovery services.
Your app and its contents should not infringe upon the rights of another party. In the event your app infringes another party’s rights, you are responsible for any liability to Apple because of a claim.
Hi everyone !
I'm getting random crashes when I'm using the Speech Recognizer functionality in my app.
This is an old bug (for 8 years on Apple Forums) and I will really appreciate if anyone from Apple will be able to find a fix for this crashes.
Can anyone also help me please to understand what could I do to keep the Speech Recognizer functionality still available in my app, but to avoid this crashes (if there is any other native library available or a CocoaPod library).
Here is my code and also the crash log for it.
Code:
func startRecording() {
startStopRecordBtn.setImage(UIImage(#imageLiteral(resourceName: "microphone_off")), for: .normal)
if UserDefaults.standard.bool(forKey: Constants.darkTheme) {
commentTextView.textColor = .white
} else {
commentTextView.textColor = .black
}
commentTextView.isUserInteractionEnabled = false
recordingLabel.text = Constants.recording
if recognitionTask != nil {
recognitionTask?.cancel()
recognitionTask = nil
}
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSession.Category.record)
try audioSession.setMode(AVAudioSession.Mode.measurement)
try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
} catch {
showAlertWithTitle(message: Constants.error)
}
recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
let inputNode = audioEngine.inputNode
guard let recognitionRequest = recognitionRequest else {
fatalError(Constants.error)
}
recognitionRequest.shouldReportPartialResults = true
recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
var isFinal = false
if result != nil {
self.commentTextView.text = result?.bestTranscription.formattedString
isFinal = (result?.isFinal)!
}
if error != nil || isFinal {
self.audioEngine.stop()
inputNode.removeTap(onBus: 0)
self.recognitionRequest = nil
self.recognitionTask = nil
self.startStopRecordBtn.isEnabled = true
}
})
let recordingFormat = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) {[weak self] (buffer: AVAudioPCMBuffer, when: AVAudioTime) in // CRASH HERE
self?.recognitionRequest?.append(buffer)
}
audioEngine.prepare()
do {
try audioEngine.start()
} catch {
showAlertWithTitle(message: Constants.error)
}
}
Here is the crash log:
Thanks for very much for reading this !
I have a custom rotor that changes the skim speed of the skim forward/backward feature of my audio player. The rotor works, but it's always playing an end-of-list sound.
Here is the code:
// Member variables
private let accessibilitySeekSpeeds: [Double] = [10, 30, 60, 180] // seconds
private var accessibilitySeekSpeedIndex: Int = 0
func seekSpeedRotor() -> UIAccessibilityCustomRotor {
UIAccessibilityCustomRotor(name: "seek speed") { [weak self] predicate in
guard let self = self else { return nil }
let speeds = accessibilitySeekSpeeds
switch predicate.searchDirection {
case .previous:
accessibilitySeekSpeedIndex = (accessibilitySeekSpeedIndex - 1 + speeds.count) % speeds.count
case .next:
accessibilitySeekSpeedIndex = (accessibilitySeekSpeedIndex + 1) % speeds.count
@unknown default:
break
}
// Return the currently selected speed as an accessibility element
let accessibilityElement = UIAccessibilityElement(accessibilityContainer: self)
let currentSpeed = localizedDuration(seconds: speeds[accessibilitySeekSpeedIndex])
accessibilityElement.accessibilityLabel = currentSpeed + " seek speed"
UIAccessibility.post(notification: .announcement, argument: currentSpeed + " seek speed")
return UIAccessibilityCustomRotorItemResult(targetElement: accessibilityElement, targetRange: nil)
}
}
The returned accessibility element isn't read out, and instead an end-of-list sound is played. I can announce the change manually using UIAccessibility.post, but it still plays the end-of-list sound.
How can I prevent the rotor from playing the end-of-list sound?