簡體   English   中英

由於keychainItemWrapper導致Ad Hoc iOS應用程序崩潰

[英]Ad Hoc iOS App Crashing due to keychainItemWrapper

當我從XCode運行它時,我的應用程序不會崩潰,但是我創建了一個IPA以與TestFlight一起使用,並且在用戶嘗試登錄該應用程序后它也崩潰了。 我相信這是由於使用了此處定義的keychainItemWrapper庫: https : //gist.github.com/dhoerl/1170641

這是我的崩潰報告的樣子:

Incident Identifier: 906A698B-555F-4922-8596-27FE481E9522
CrashReporter Key:   8722e51d4300c003d1ac939808b1a9c67f112194
Hardware Model:      iPhone6,1
Process:             -
Path:                /var/mobile/Applications/B2EFB5F3-86C0-4E87-850D-27F771A1FA41/App.app/App
Identifier:          -
Version:             1.0 (1.0)
Code Type:           ARM-64 (Native)
Parent Process:      launchd [1]

Date/Time:           2014-09-08 21:10:03.911 -0400
OS Version:          iOS 7.1.2 (11D257)
Report Version:      104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x000000008945bec8
Triggered by Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x00000001991ac0b8 objc_retain + 24
1   App                             0x000000010008118c -[LoginViewController loginClick:] (LoginViewController.m:246)
...

在LoginViewController的第246行,我運行以下方法:

        [self authenticateUser];

定義如下:

-(IBAction)authenticateUser {
    [keychainItem resetKeychainItem]; // remove any existing auth_token

   [keychainItem setObject:[_txtUsername text] forKey:(__bridge id)(kSecAttrAccount)];

    NSURL *url=[NSURL URLWithString:sessionsBaseURL];
    NSError *error = [[NSError alloc] init];
    NSDictionary * userDict = [[NSDictionary alloc] initWithObjectsAndKeys: [_txtUsername text], @"username", [_txtPassword text], @"password", nil];
    NSDictionary * holderDict = [[NSDictionary alloc] initWithObjectsAndKeys: userDict, @"user", nil];
    NSLog(@"user holderDict: %@", holderDict);
    NSData * holder = [NSJSONSerialization dataWithJSONObject:holderDict options:0 error:&error];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:url];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:holder];

    NSURLResponse * response = nil;
    NSData * receivedData = nil;

    receivedData = [NSMutableData data];
    receivedData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    // get dictionary from json data
    NSDictionary * jsonResponse = [NSJSONSerialization
                                   JSONObjectWithData: receivedData
                                   options:kNilOptions
                                   error:&error];

    NSLog(@"jsonResponse: %@", jsonResponse);
    NSDictionary * dataResponse = [jsonResponse objectForKey:@"data"];
    auth_token = [dataResponse objectForKey:@"auth_token"];

    // save user authentication token in NSUserDefaults
    NSUserDefaults* preferences = [NSUserDefaults standardUserDefaults];    
    [keychainItem setObject:[dataResponse objectForKey:@"auth_token"] forKey:(__bridge id)(kSecValueData)];

    [self checkLoginApproved];
}

我真的很感謝任何幫助,因為它阻止了我發布我的應用程序!

您是否使用accessGroup:nil創建KeychainItemWrapper? 嘗試使用字符串-對我有幫助

[[KeychainItemWrapper alloc] initWithIdentifier:@"userCredentials" accessGroup:@"reverse.tld.example"];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM