Как отлаживать Firebase в сборке iOS AdHoc

Единственный способ отладки Firebase - передать -FIRAnalyticsDebugEnabled аргументы, переданные при запуске.

Он работает в режиме отладки с подключенным моим устройством iOS, но я хотел бы развернуть сборку AdHoc, чтобы QA мог протестировать ее без Xcode.

Но кажется, что аргументы не передаются при запуске, когда Xcode архивирует сборку.

Любое решение? Спасибо.


person Antoine Gamond    schedule 03.05.2017    source источник


Ответы (4)


Я нашел для этого хакерское решение, попробуйте его в своем приложении: didFinishLaunchingWithOptions: или переопределите инициализацию AppDelegate:

Цель-C:

NSMutableArray *newArguments = [NSMutableArray arrayWithArray:[[NSProcessInfo processInfo] arguments]];
[newArguments addObject:@"-FIRDebugEnabled"];
[[NSProcessInfo processInfo] setValue:[newArguments copy] forKey:@"arguments"];

Быстрый:

var newArguments = ProcessInfo.processInfo.arguments
newArguments.append("-FIRDebugEnabled")
ProcessInfo.processInfo.setValue(newArguments, forKey: "arguments")
person Dre Sid    schedule 01.12.2017
comment
Это определенно хакерское решение, но оно работает. Действительно помогли мне сделать сборки AdHoc для инженеров по обеспечению качества, чтобы легко отлаживать события аналитики. Спасибо! - person xZenon; 25.07.2018
comment
Это все еще работает? Я пробовал использовать быстрый код, но у меня он не работает. - person SimpleApp; 05.11.2018
comment
@SimpleApp Да, работает. Убедитесь, что вы поместили этот код перед инициализацией Firebase. Я предпочитаю ставить его раньше application:didStartWithOptions:, и он отлично работает. - person xZenon; 20.12.2018
comment
@SimpleApp Существует путаница между -FIRAnalyticsDebugEnabled и -FIRDebugEnabled. В моем случае он работает с -FIRAnalyticsDebugEnabled - person Axel Guilmin; 09.04.2019
comment
Большое спасибо. На самом деле мне нужно поместить ваш код перед инициализацией Firebase. - person Luan Si Ho; 13.08.2019
comment
Google, похоже, решил эту проблему, и добавление этого вручную больше не работает. - person Claus Jørgensen; 30.09.2019

В дополнение к предложению выше:

  • Добавьте файлы xcconfig для каждого режима сборки (например, отладка, специальная подготовка и выпуск): https://www.appcoda.com/xcconfig-guide
  • Добавьте в все файлы конфигурации: FIREBASE_DEBUG_ENABLED = YES или NO (например: YES везде, кроме Release)
  • Добавьте в файл Info.plist запись с ключом: FirebaseDebugEnabled и строковым значением: $(FIREBASE_DEBUG_ENABLED)
  • В вашем AppDelegate.m, в didFinishLaunchingWithOptions методе добавьте следующий оператор:

Цель-C

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"];   
NSDictionary *plistConfig = [[NSDictionary alloc] initWithContentsOfFile:plistPath];

// Firebase   
BOOL isFirebaseDebugEnabled = [[plistConfig valueForKey:@"FirebaseDebugEnabled"] boolValue];

if (isFirebaseDebugEnabled) {
    NSLog(@"Firebase debug enabled.");
    NSMutableArray *newArguments = [NSMutableArray arrayWithArray:[[NSProcessInfo processInfo] arguments]];
    [newArguments addObject:@"-FIRAnalyticsDebugEnabled"];
    [newArguments addObject:@"-FIRDebugEnabled"];
    [[NSProcessInfo processInfo] setValue:[newArguments copy] forKey:@"arguments"];   
}

[FIRApp configure];

Swift 4.2

if  let path = Bundle.main.path(forResource: "Info", ofType: "plist"),
    let plist = FileManager.default.contents(atPath: path),
    let preferences = try? PropertyListSerialization.propertyList(from: plist, options: .mutableContainersAndLeaves, format: nil) as? [String:AnyObject],
    let isFirebaseDebugEnabled = preferences["FirebaseDebugEnabled"] as? Bool
{
    if isFirebaseDebugEnabled {
        var args = ProcessInfo.processInfo.arguments
        args.append("-FIRAnalyticsDebugEnabled")
        args.append("-FIRDebugEnabled")
        ProcessInfo.processInfo.setValue(args, forKey: "arguments")
    }
}

Вы можете создать свое приложение, выбрав в целевой схеме в разделе Run конфигурацию сборки, которую хотите использовать (по умолчанию: Debug), и поэтому попробуйте запустить приложение в режимах Adhoc и Release.

person VincentCATILLON    schedule 17.04.2019

Просто некоторые дополнения к самому высокоразвитому ответу: я бы сделал что-то вроде этого

#if DEBUG
     var newArguments = ProcessInfo.processInfo.arguments
        newArguments.append("-FIRDebugEnabled")
        ProcessInfo.processInfo.setValue(newArguments, forKey: "arguments")
#endif

чтобы сохранить его для отладки. Это требует, чтобы вы установили -DDEBUG в «Other Swift Flags» в настройках сборки. (вам, конечно же, нужно установить это для значения Debug.

И затем не забудьте вставить фрагмент кода ПЕРЕД инициализацией Firebase :-)

person Nicolai Harbo    schedule 05.04.2019

В настоящее время нет возможности включить режим отладки в сборке AdHoc или сборке выпуска, и это сделано намеренно. DebugView предназначен только для разработки. После создания приложения вы можете проверить только реальный трафик, то есть через 2-4 часа после запуска.

person adbitx    schedule 03.05.2017