2016-11-04 2 views
0

Ich habe eine Test-App (die nichts tut, weil ich es verwende, um einen Fehler zu testen), die 3 Frameworks enthält, die ich gebaut habe. Die Frameworks werden mithilfe einer Phase mit Kopierdateien in das Frameworks-Verzeichnis der App kopiert. Ich habe folgenden AppDelegate Code:iOS: objc_copyClassNamesForImage funktioniert nicht auf dem Gerät

#import "AppDelegate.h" 
@import ObjectiveC; 

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [[NSBundle allFrameworks] enumerateObjectsUsingBlock:^(NSBundle *framework, NSUInteger idx, BOOL *stop) { 
     unsigned int count = 0; 
     __unused const char** classes = objc_copyClassNamesForImage([[framework executablePath] UTF8String], &count); 
     NSRange inFramework = [framework.executablePath rangeOfString:@".app/Frameworks"]; 
     if (inFramework.length > 0) { 
      NSLog(@"Framework %@, classes: %i", framework.executablePath.lastPathComponent, count); 
     } 
    }]; 
    return YES; 
} 

@end

, die die Gerüste aus dem Frameworks Verzeichnis ausdruckt und die Anzahl der Klassen in jedem enthalten.

Wenn ich diesen Code im Simulator laufen ich die folgenden Ergebnisse erhalten:

2016-11-04 12:02:17.682 RuntimeTest[54326:623229] Framework PEGKit, classes: 24 
2016-11-04 12:02:17.705 RuntimeTest[54326:623229] Framework Alchemic, classes: 57 
2016-11-04 12:02:17.707 RuntimeTest[54326:623229] Framework StoryTeller, classes: 10 

Jedoch, wenn ich es auf einem Gerät laufen erhalte ich:

2016-11-04 12:07:04.215417 RuntimeTest[1035:365233] Framework PEGKit, classes: 0 
2016-11-04 12:07:04.224495 RuntimeTest[1035:365233] Framework Alchemic, classes: 0 
2016-11-04 12:07:04.254946 RuntimeTest[1035:365233] Framework StoryTeller, classes: 0 

Das Gerät ist ein iPhone 7 mit iOS 10.1. Ich bin mir ziemlich sicher, dass dieser Code in der Vergangenheit funktioniert hat und es scheint, dass objc_copyClassNamesForImage irgendwie kaputt ist.

Meine Arbeitstheorie ist, dass dies ein 10.1 Fehler sein könnte. Oder vielleicht etwas, das in den Build-Eigenschaften gesetzt/nicht gesetzt ist.

In jedem in der Lage, dies zu bestätigen? oder hast du eine Idee, was falsch sein könnte?

Antwort

0

Auf dem Gerät sollten Sie den Pfad zum Framework-Image mit /private voranstellen. Wenn Sie ein Bündel nach seinem Pfad fragen, sehen Sie, dass es das Präfix /private hat. So habe ich die Problemumgehung gefunden.

Verwandte Themen