2016-11-06 102 views
1

iOS 10アップルは、分散アプリケーション(enterprise、app-store)でNSLog()出力が生成されないという変更を行いました。iOSの分散アプリケーションでNSLog出力がありません。

Xcodeから実行すると、NSLog()は正常に動作することに注意してください。

すべてのアプリを強制的にデバッグする方法はありますか(ベータテスト段階では非常に便利です)。

いくつかの手がかりがここに表示されます。NSLog on devices in iOS 10/Xcode 8 seems to truncate? Why?

しかし、我々はこのための明確な実装を持つことができますか?

答えて

0

当社のソリューションは、二つの質問に依存します。

  1. 我々はXcodeの8を使用してコンパイルしてアップしていますか? yesの場合は、新しいos_logが認識されます。もしそうでなければ、既存のNSLogの振る舞いに落ちなければなりません。
  2. 私たちはiOS-10以上で動作していますか?はいの場合は、新しいロガーを使用できます。もしそうでなければ、既存のNSLogの振る舞いに落ちなければなりません。

コンパイル時に[1]の回答が見つかります。 [2]では、実行時にテストする必要があります。ここで

は実装です:

mylog.h

//only used to force its +load() on app initialization 
@interface MyLog:NSObject 
@end 

#if !__has_builtin(__builtin_os_log_format) 
    //pre Xcode 8. use NSLog 
#else 
    //we need this include: 
    #import <os/log.h> 
#endif 

void myLog(NSString *format, ...); 

#ifdef DEBUG 
    #define NSLog(f, ...) myLog(f, ## __VA_ARGS__) 
#else 
    #define NSLog(f, ...) (void)0 
#endif 

mylog.m

@implementation MyLog 

BOOL g_useNewLogger = NO; 

+(void)load 
{ 
    NSOperatingSystemVersion os_ver = [[NSProcessInfo processInfo] operatingSystemVersion]; 
    if (os_ver.majorVersion >= 10) { 
     g_useNewLogger = YES; 
    } 
    NSLog(@"Use new logger: %@", g_useNewLogger? @"YES":@"NO"); 
} 
@end 

void myLog(NSString *format, ...) 
{ 
    va_list args; 
    va_start(args, format); 
#if !__has_builtin(__builtin_os_log_format) 
    //pre Xcode 8. use NSLog 
    NSLogv(format, args); 
#else 
    //Xcode 8 and up 
    if (g_useNewLogger) { // >= iOS 10 
     NSString *nsstr = [[NSString alloc] initWithFormat:format arguments:args]; 
     os_log(OS_LOG_DEFAULT, "%{public}s", [nsstr cStringUsingEncoding:NSUTF8StringEncoding]); 
    } else { // < iOS 10 
     NSLogv(format, args); 
    } 
#endif 
    va_end(args); 
} 
0

あなたが得るためにドロップインソリューションが必要な場合あなたのアプリケーションのログ、私はツールを見てみることをお勧めします作成しました。それはBugfenderと呼ばれ、それは私たちのサイトにそれらを確認することができるように私たちのサーバーにすべてのアプリのログを送信することです。

ユーザーがアプリをテストできるため、ベータテストを行う際に非常に便利です。問題が見つかった場合は、アプリで行ったすべての情報を取得できます。

関連する問題