NSDate* now = [NSDate date];
// How get midnight time of now?
How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here
Objective-C
RSS for tagObjective-C is a programming language for writing iOS, iPad OS, and macOS apps.
Posts under Objective-C tag
128 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
2024_06_09_testflight_launch_crash_log.txt
Running my macOS app the first time after installing via TestFlight crashes on launch. Every subsequent run works fine (including completely quitting the app and re-running it).
Also, building and running directly in XCode both in Debug and Release mode works fine.
I'm on a Mac M2 and the app excludes x86_64 arch.
Here is the trimmed crash log (sanitised full log is attached)
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: Namespace SIGNAL, Code 6 Abort trap: 6
Terminating Process: CamHero-macOS-v2-Release [12876]
Application Specific Information:
abort() called
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x18c81d11c __pthread_kill + 8
1 libsystem_pthread.dylib 0x18c854cc0 pthread_kill + 288
2 libsystem_c.dylib 0x18c764a40 abort + 180
3 libglib-2.0.0.dylib 0x1061e5bd0 g_assertion_message + 464
4 libglib-2.0.0.dylib 0x1061e5c44 g_assertion_message_expr + 116
5 libgstlibav.dylib 0x10549ede0 gst_ffmpeg_cfg_init + 776
6 libgstlibav.dylib 0x10548a4f4 plugin_init + 140
7 libgstreamer-1.0.0.dylib 0x10646a458 gst_plugin_register_func + 636
8 libgstreamer-1.0.0.dylib 0x106469fe4 gst_plugin_register_static + 212
9 libgstlibav.dylib 0x10548a45c gst_plugin_libav_register + 92
10 CamHero-macOS-v2-Release 0x104a01624 gst_ios_init + 900 (gst_ios_init.m:1072)
11 CamHero-macOS-v2-Release 0x104a80590 specialized CamHeroMacOSApp.init() + 68 (CamHeroMacOSApp.swift:19)
12 CamHero-macOS-v2-Release 0x104a804a4 CamHeroMacOSApp.init() + 4 [inlined]
13 CamHero-macOS-v2-Release 0x104a804a4 protocol witness for App.init() in conformance CamHeroMacOSApp + 20 (<compiler-generated>:16)
14 SwiftUI 0x1b7f134e0 0x1b7163000 + 14353632
15 CamHero-macOS-v2-Release 0x104a804d8 static CamHeroMacOSApp.$main() + 24 [inlined]
16 CamHero-macOS-v2-Release 0x104a804d8 main + 36
17 dyld 0x18c4d90e0 start + 2360
Thread 1:
0 libsystem_pthread.dylib 0x18c84fe28 start_wqthread + 0
Thread 2:
0 libsystem_pthread.dylib 0x18c84fe28 start_wqthread + 0
Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000000000000 x1: 0x0000000000000000 x2: 0x0000000000000000 x3: 0x0000000000000000
x4: 0x0000600000755680 x5: 0x0000000000000020 x6: 0x0000600000755680 x7: 0xffffffff00008600
x8: 0x8ddd1ea266cd729b x9: 0x8ddd1ea3846d2c5b x10: 0x0000000000001620 x11: 0x00000000dbe367fb
x12: 0x00000000000007fb x13: 0x00000000000007fd x14: 0x00000000dc03683c x15: 0x000000000000003c
x16: 0x0000000000000148 x17: 0x00000001eb9f3da0 x18: 0x0000000000000000 x19: 0x0000000000000006
x20: 0x00000001e2a05ec0 x21: 0x0000000000000103 x22: 0x00000001e2a05fa0 x23: 0x000000016b407508
x24: 0x0000000000000000 x25: 0x00000001064f8450 x26: 0x000060000080d511 x27: 0x0000000000000000
x28: 0x0000000000000000 fp: 0x000000016b407460 lr: 0x000000018c854cc0
sp: 0x000000016b407440 pc: 0x000000018c81d11c cpsr: 0x40001000
far: 0x0000000000000000 esr: 0x56000080 Address size fault
It seems that the initialisation of one of the gstreamer plug-ins doesn't go well. But, I wonder what might lead to that happening only the first time after launch?
Will appreciate any clues!
EDIT / UPDATE:
If i remove the app completely and install the same version again from TestFlight, app doesn't crash. So it seems the crashing is limited to the very first launch of a new /updated version.
Topic:
App Store Distribution & Marketing
SubTopic:
TestFlight
Tags:
Swift
Xcode
Objective-C
TestFlight
I have a sample iOS app in Xcode that I run in the iOS 17.5 Simulator. It creates a WKWebView and configures a proxy via the ProxyConfiguration API, it works as expected unless the proxy tries to establish mTLS. It seems there is no way to handle the client certificate request when using a proxy. If I navigate to a page that requests mTLS without a proxy configured, it works as expected. Here is a minimal repro:
#import "ViewController.h"
#import <WebKit/WebKit.h>
@import Foundation;
@import WebKit;
@interface ViewController () <WKNavigationDelegate>
@property (nonatomic,strong) WKWebView* webView;
@property (nonatomic, strong) WKWebViewConfiguration * webConfig;
@end
@implementation ViewController
- (void)loadView {
[super loadView];
nw_protocol_options_t tls_options = nw_tls_create_options();
sec_protocol_options_t sec_options = nw_tls_copy_sec_protocol_options(tls_options);
sec_protocol_options_set_challenge_block(
sec_options,
^(sec_protocol_metadata_t metadata, sec_protocol_challenge_complete_t challenge_complete) {
NSLog(@"Inside of challenge block");
challenge_complete(nil);
},
dispatch_get_main_queue());
nw_endpoint_t proxy_endpoint =
nw_endpoint_create_host(GetHost(), GetPort());
nw_relay_hop_t relay =
nw_relay_hop_create(nil, proxy_endpoint, tls_options);
nw_proxy_config_t proxy_config =
nw_proxy_config_create_relay(relay, nil);
nw_proxy_config_add_match_domain(proxy_config, "api.ipify.org");
self.webConfig = [[WKWebViewConfiguration alloc] init];
self.webConfig.websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
self.webConfig.websiteDataStore.proxyConfigurations = @[ proxy_config ];
self.webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:self.webConfig];
self.webView.navigationDelegate = self;
[self.view addSubview:self.webView];
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%s",__func__);
NSURL* url = [[NSURL alloc] initWithString:@"https://api.ipify.org"];
NSURLRequest* request = [[NSURLRequest alloc] initWithURL:url];
[self.webView loadRequest:request];
}
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
NSLog(@"%s",__func__);
}
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error {
NSLog(@"%s. Error %@",__func__,error);
}
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler {
NSLog(@"%s",__func__);
NSLog(@"protection space: %@", challenge.protectionSpace.authenticationMethod);
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
}
@end
The logs for this code show:
-[ViewController viewDidLoad]
-[ViewController webView:didStartProvisionalNavigation:]
-[ViewController webView:didFailProvisionalNavigation:withError:]. Error Error Domain=NSURLErrorDomain Code=-1206 "The server “api.ipify.org” requires a client certificate."
If we don't set up the ProxyConfiguration and navigate to a site that requires mTLS, the logs look like this:
-[ViewController viewDidLoad]
-[ViewController webView:didReceiveAuthenticationChallenge:completionHandler:]
protection space: NSURLAuthenticationMethodServerTrust
-[ViewController webView:didReceiveAuthenticationChallenge:completionHandler:]
protection space: NSURLAuthenticationMethodClientCertificate
-[ViewController webView:didStartProvisionalNavigation:]
//...
Eventually the request fails but the key difference is that didReceiveAuthenticationChallenge was invoked. When using the ProxyConfiguration neither that function nor the block we set via sec_protocol_options_set_challenge_block were run.
I also tried to provide the client identity via sec_protocol_options_set_local_identity to no avail, and I've tried configuring these options too but they had no effect
sec_protocol_options_add_tls_application_protocol(sec_options, "h2");
sec_protocol_options_set_max_tls_protocol_version(sec_options, tls_protocol_version_TLSv13);
sec_protocol_options_set_peer_authentication_required(sec_options, true);
Am I missing something? Or is this a bug in the ProxyConfiguration API?
Problem Statement:
Unable to import .h file from an ObjC SPM to a .h file in an ObjC file in a framework with mix of ObjC and Swift code
The issue is: in order to support access of ObjC file in Swift code in a framework we need to use umbrella header (in place of bridging header). Once the file is imported in Umbrella header and made public it will no longer allow import of .h file from package in its interface
Project Structure:
a. Package: ObjCPackage
ObjCPackage
|- Package.swift
|- ObjCPackage
MathsUtilities.h (class interface)
MathsUtilities.m (class implementation)
NiceLogs.h (protocol)
b. Project: ObjCSwiftFramework
ObjCSwiftFramework
|- ObjCSwiftFramework.h (umbrella header)
|- Calculation.h (objc class interface)
|- Calculation.m (objc class implementation)
|- SwiftCalci.swift (swift class)
Details:
#import <ObjCSwiftFramework/Calculation.h> added in ObjCSwiftFramework.h as Calculation has to be used in SwiftCalci
Calculation.h marked as public in target membership in Xcode so that it can be added in umbrella header ObjCSwiftFramework.h
#import "NiceLogs.h" in Calculation.h gives error
Here is a small sample which I created to demonstrate the problem:
ObjCSwiftFramework
I have an Electron app on macOS Sonoma (Intel arch). It has a native addon (app.node) using node-addon-api. Recently it crashed, with the stack trace (given below). What is the CF_IS_OBJC function inside the CFDataGetBytePtr function, and why did it crash there?
[NSEvent addGlobalMonitorForEventsMatchingMask:NSEventMaskKeyDown handler:^(NSEvent *event) {
// code using CFDataGetBytePtr function
}];
[NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskKeyDown handler:^NSEvent *_Nullable(NSEvent *event) {
// code using CFDataGetBytePtr function
return event;
}];
I have key events monitors attached using addGlobalMonitorForEventsMatchingMask and addLocalMonitorForEventsMatchingMask in my native code and they use the CFDataGetBytePtr function there. So I think the issue happened in the key event monitor handler when calling the CFDataGetBytePtr function because my native addon app.node is also present in the trace. Also from the third and fourth entry in the stack trace, it seems like it happened while the app was updating.
OS Version: macOS 14.4 (23E214)
Report Version: 104
Crashed Thread: 5490
Application Specific Information:
Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS / 0x0
Thread 5490 Crashed:
0 CoreFoundation 0x19c970118 CF_IS_OBJC
1 CoreFoundation 0x19c83b280 CFDataGetBytePtr
2 .app.desktop.1inmRz 0x104a5bec0 <unknown>
3 .app.desktop.1inmRz 0x104a57b28 <unknown>
4 app.node 0x104a80a7c [inlined] Napi::details::CallbackData<T>::Wrapper::lambda::operator() (napi-inl.h:117)
5 app.node 0x104a80a7c Napi::details::WrapCallback<T> (napi-inl.h:79)
6 app.node 0x104a80a24 Napi::details::CallbackData<T>::Wrapper (napi-inl.h:112)
7 Electron Framework 0x11472e5e0 v8impl::(anonymous namespace)::FunctionCallbackWrapper::Invoke (js_native_api_v8.cc:441)
8 <unknown> 0x147e105f8 <unknown>
9 <unknown> 0x1401d0814 <unknown>
10 <unknown> 0x1401d0a9c <unknown>
11 <unknown> 0x147f19368 <unknown>
12 <unknown> 0x147e0aab0 <unknown>
13 <unknown> 0x1401d0e00 <unknown>
14 <unknown> 0x1401d1ac0 <unknown>
15 <unknown> 0x147f19368 <unknown>
16 <unknown> 0x147e0aab0 <unknown>
17 <unknown> 0x1401d1494 <unknown>
18 <unknown> 0x1401d20dc <unknown>
19 <unknown> 0x147e4c1b4 <unknown>
20 <unknown> 0x147f1b5f8 <unknown>
21 <unknown> 0x147e3b754 <unknown>
22 <unknown> 0x147e0b618 <unknown>
23 Electron Framework 0x10ee0c49c v8::internal::(anonymous namespace)::Invoke (simulator.h:178)
24 Electron Framework 0x10ee0d08c v8::internal::(anonymous namespace)::InvokeWithTryCatch (execution.cc:475)
25 Electron Framework 0x10ee0d1e0 v8::internal::Execution::TryRunMicrotasks (execution.cc:576)
26 Electron Framework 0x10ee37364 v8::internal::MicrotaskQueue::PerformCheckpoint (microtask-queue.cc:176)
27 Electron Framework 0x1146cce9c node::InternalCallbackScope::Close (callback.cc:137)
28 Electron Framework 0x1146ccb64 node::InternalCallbackScope::~InternalCallbackScope (callback.cc:92)
29 Electron Framework 0x1147112b4 node::Environment::RunTimers (env.cc:1376)
30 Electron Framework 0x10daf9980 uv__run_timers (timer.c:178)
31 Electron Framework 0x10dafcb3c uv_run (core.c:465)
32 Electron Framework 0x10dc944d4 electron::NodeBindings::UvRunOnce (node_bindings.cc:891)
33 Electron Framework 0x110e2016c base::TaskAnnotator::RunTaskImpl (callback.h:156)
34 Electron Framework 0x110e3cea4 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWork (task_annotator.h:89)
35 Electron Framework 0x110e8851c base::MessagePumpCFRunLoopBase::RunWorkSource (message_pump_apple.mm:444)
36 Electron Framework 0x10da7ad7c base::apple::CallWithEHFrame
37 Electron Framework 0x110e876a4 base::MessagePumpCFRunLoopBase::RunWorkSource (message_pump_apple.mm:415)
38 CoreFoundation 0x19c89deac __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
39 CoreFoundation 0x19c89de40 __CFRunLoopDoSource0
40 CoreFoundation 0x19c89dbb0 __CFRunLoopDoSources0
41 CoreFoundation 0x19c89c79c __CFRunLoopRun
42 CoreFoundation 0x19c89be08 CFRunLoopRunSpecific
43 HIToolbox 0x1a7036ffc RunCurrentEventLoopInMode
44 HIToolbox 0x1a7036e38 ReceiveNextEventCommon
45 HIToolbox 0x1a7036b90 _BlockUntilNextEventMatchingListInModeWithFilter
46 AppKit 0x1a00f496c _DPSNextEvent
47 AppKit 0x1a08e6de8 -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]
48 AppKit 0x1a00e7cb4 -[NSApplication run]
49 Electron Framework 0x110e89244 base::MessagePumpNSApplication::DoRun (message_pump_apple.mm:805)
50 Electron Framework 0x110e87068 base::MessagePumpCFRunLoopBase::Run (message_pump_apple.mm:156)
51 Electron Framework 0x110e3d9a0 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run (thread_controller_with_message_pump_impl.cc:646)
52 Electron Framework 0x110e05a98 base::RunLoop::Run (run_loop.cc:134)
53 Electron Framework 0x10ffcbcd0 content::BrowserMainLoop::RunMainMessageLoop (browser_main_loop.cc:1094)
54 Electron Framework 0x10ffcd744 content::BrowserMainRunnerImpl::Run (browser_main_runner_impl.cc:158)
55 Electron Framework 0x10ffc964c content::BrowserMain (browser_main.cc:34)
56 Electron Framework 0x10de12aa8 content::RunBrowserProcessMain (content_main_runner_impl.cc:712)
57 Electron Framework 0x10de13b1c content::ContentMainRunnerImpl::RunBrowser (content_main_runner_impl.cc:1299)
...
I have a sandboxed app in /Applications.
I'm attempting to shoot a problem with LLDB, so I cd to /Applications/app-name/Contents/MacOS and do lldb programname.
However, once I fire it off with "r" it dies instantly with:
error: process exited with status -1 (lost connection)
Should this work? Should I try signing the lldb executable?
Thanks!
Hi, I work on a game for iOS and the framerate decreases progressively when the debugger is attached.
Running it for 2mins, it went from 30 to 1 FPS while rendering a simple static scene.
I narrowed it down to a call to dispatch_async_f which takes longer to execute over time.
clock_t t1 = clock();
dispatch_async_f(queue, context, function);
clock_t t2 = clock();
double duration = (double)(t2 -t1)/(double)CLOCKS_PER_SEC;
Dodumentation says dispatch_async_f is supposed to return immediatly.
So what could explain duration to increases in debug? Am i measuring this incorrectly?
The game is written in mixed C++ and ObjC. It uses Metal as graphic API and GCD for dispatching jobs.
I have Xcode 13.4.1 and test on an iPhone 13 Pro with iOS 15.7.
Thanks.
Topic:
App & System Services
SubTopic:
Processes & Concurrency
Tags:
Metal
Debugging
Objective-C
Dispatch
I am trying to develop a plug in for motion in Objective-c using the FxPlug template and so far I have been having issues with getting "NSOpenPanel" to be called from a push button in order to get a file dialog window, similar to the "File" generator present in Motion.
[paramAPI addPushButtonWithName: @"MIDI file"
parameterID: 1
selector: @selector(MIDI_func)
parameterFlags: kFxParameterFlag_DEFAULT]
I have tried to call NSOpenPanel through "dispatch_async" so that it would run on the main thread and thus not crash but when I press the button it appears not to work
- (void)MIDI_func {
NSLog(@"Button pressed");
dispatch_async(dispatch_get_main_queue(), ^{
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setAllowsMultipleSelection:NO];
[openDlg setCanChooseDirectories:NO];
if ([openDlg runModal] == NSModalResponseOK) {
NSArray* urls = [openDlg URLs];
for(NSInteger i = 0; i < [urls count]; i++ ) {
NSString* url = [urls objectAtIndex:i];
NSLog(@"Url: %@", url);
}
}
});
}
How can I achieve this or is there a function in the FxPlug SDK that will let me open a file dialog from the host application?
Topic:
Developer Tools & Services
SubTopic:
Xcode
Tags:
Xcode
Professional Video Applications
Objective-C