| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // Copyright 2019 Google
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- #import "Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.h"
- #import "Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.h"
- #define CLS_XCODE_DSYM_PREFIX (@"com.apple.xcode.dsym.")
- @interface FIRCLSdSYM ()
- @property(nonatomic, readonly) NSBundle* bundle;
- @end
- @implementation FIRCLSdSYM
- + (id)dSYMWithURL:(NSURL*)url {
- return [[self alloc] initWithURL:url];
- }
- - (id)initWithURL:(NSURL*)url {
- self = [super init];
- if (self) {
- NSDirectoryEnumerator* enumerator;
- NSString* path;
- NSFileManager* fileManager;
- BOOL isDirectory;
- BOOL fileExistsAtPath;
- NSArray* itemsInDWARFDir;
- fileManager = [NSFileManager defaultManager];
- // Is there a file at this path?
- if (![fileManager fileExistsAtPath:[url path]]) {
- return nil;
- }
- _bundle = [NSBundle bundleWithURL:url];
- if (!_bundle) {
- return nil;
- }
- path = [[url path] stringByAppendingPathComponent:@"Contents/Resources/DWARF"];
- // Does this path exist and is it a directory?
- fileExistsAtPath = [fileManager fileExistsAtPath:path isDirectory:&isDirectory];
- if (!fileExistsAtPath || !isDirectory) {
- return nil;
- }
- enumerator = [fileManager enumeratorAtPath:path];
- itemsInDWARFDir = [enumerator allObjects];
- // Do we have a Contents/Resources/DWARF dir but no contents?
- if ([itemsInDWARFDir count] == 0) {
- return nil;
- }
- path = [path stringByAppendingPathComponent:[itemsInDWARFDir objectAtIndex:0]];
- _binary = [[FIRCLSMachOBinary alloc] initWithURL:[NSURL fileURLWithPath:path]];
- }
- return self;
- }
- - (NSString*)bundleIdentifier {
- NSString* identifier;
- identifier = [_bundle bundleIdentifier];
- if ([identifier hasPrefix:CLS_XCODE_DSYM_PREFIX]) {
- return [identifier substringFromIndex:[CLS_XCODE_DSYM_PREFIX length]];
- }
- return identifier;
- }
- - (NSURL*)executableURL {
- return [_binary URL];
- }
- - (NSString*)executablePath {
- return [_binary path];
- }
- - (NSString*)bundleVersion {
- return [[_bundle infoDictionary] objectForKey:@"CFBundleVersion"];
- }
- - (NSString*)shortBundleVersion {
- return [[_bundle infoDictionary] objectForKey:@"CFBundleShortVersionString"];
- }
- - (void)enumerateUUIDs:(void (^)(NSString* uuid, NSString* architecture))block {
- [_binary enumerateUUIDs:block];
- }
- @end
|