私は機密のクレジットカードデータを処理するアプリを作っています。
コードがデバッグモードで実行されている場合は、このデータをコンソールに記録してファイルダンプを作成します。
ただし、Appstoreの最終バージョン(つまりリリースモードで実行されている場合)では、これらすべてを無効にする必要があります(セキュリティ上の問題)。
私はできる限り自分の質問に答えようとします。そのため、質問は'この解決策のパスは正しいか、それとも最善の方法ですか?'となります。
// add `IS_DEBUG=1` to your debug build preprocessor settings
#if( IS_DEBUG )
#define MYLog(args...) NSLog(args)
#else
#define MYLog(args...)
#endif
デバッグのために 'Apple LVM - Preprocessing'、 'Preprocessor Macros'でプロジェクトのビルド設定をチェックして 'DEBUG'が設定されていることを確認してください - プロジェクトを選択してbuild settingsタブをクリックしてください。 「DEBUG」を検索し、実際にDEBUGが設定されているかどうかを確認してください。
しかし注意してください。 DEBUGがDEBUG_MODEのような他の変数名に変更されたのを見るかもしれません。
それから、ソースファイルにDEBUGを条件付きでコーディングします。
#ifdef DEBUG
// Something to log your sensitive data here
#else
//
#endif
Swiftでの解決策については、SOの このスレッド を参照してください。
基本的にSwiftの解は次のようになります。
#if DEBUG
println("I'm running in DEBUG mode")
#else
println("I'm running in a non-DEBUG mode")
#endif
さらに、Swift Compiler - Custom Flags
エントリを介してOther Swift Flags
キーの-D DEBUG
セクションにDEBUG
シンボルを設定する必要があります。例として、次のスクリーンショットを参照してください。
Appleはデバッグビルドに既にDEBUG
フラグを含んでいるので、あなたはあなた自身を定義する必要はありません。
NSLog
モードではないときにDEBUG
をnull操作に単に再定義することを検討することをお勧めします。そうすることでコードの移植性が高まり、通常のNSLog
ステートメントを使用することができます。
//put this in prefix.pch
#ifndef DEBUG
#undef NSLog
#define NSLog(args, ...)
#endif
zitao xiongの答えは私の使っているものにかなり近いです。ファイル名も含めます(FILEのパスを削除して)。
#ifdef DEBUG
#define NSLogDebug(format, ...) \
NSLog(@"<%s:%d> %s, " format, \
strrchr("/" __FILE__, '/') + 1, __LINE__, __PRETTY_FUNCTION__, ## __VA_ARGS__)
#else
#define NSLogDebug(format, ...)
#endif
Xcode 7では、Apple LLVM 7.0 - 前処理の下に ""というプリプロセッサマクロが使用されていないフィールドがあります。 "私はDEBUGをDebugの前に置き、それは以下のコードを使うことで私のために働きます:
#ifdef DEBUG
NSString* const kURL = @"http://debug.com";
#else
NSString* const kURL = @"http://release.com";
#endif
検出するもう1つのアイデア:
DebugMode.h
#import <Foundation/Foundation.h>
@interface DebugMode: NSObject
+(BOOL) isDebug;
@end
DebugMode.m
#import "DebugMode.h"
@implementation DebugMode
+(BOOL) isDebug {
#ifdef DEBUG
return true;
#else
return false;
#endif
}
@end
ヘッダーブリッジファイルに追加します。
#include "DebugMode.h"
使用法:
DebugMode.isDebug()
プロジェクトプロパティSwiftのフラグの中に何かを書く必要はありません。
私があなたの質問に答えたかどうかわからない、多分あなたはこれらのコードを試すことができます:
#ifdef DEBUG
#define DLOG(xx, ...) NSLog( \
@"%s(%d): " \
xx, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__ \
)
#else
#define DLOG(xx, ...) ((void)0)
#endif
#if DEBUG
は、開発/アドホックビルド、デバイス、またはシミュレータを渡します。 App Storeのリリースでは間違っています。