Xcode8控制臺(tái)亂碼的另一種解決方式

之前解決控制臺(tái)log輸出的方式

Xcode8里邊 Edit Scheme-> Run -> Arguments, 在Environment Variables里邊添加 OS_ACTIVITY_MODE = Disable 環(huán)境變量 ,這個(gè)相信大家都會(huì).

707724-e81adf182229475f.png

使用改變Xcode系統(tǒng)模板的方式

先介紹幾個(gè)c函數(shù)

/**
 *getenv(取得環(huán)境變量?jī)?nèi)容)
 *定義函數(shù) char * getenv(const char *name);
 *函數(shù)說明 getenv()用來取得參數(shù)name環(huán)境變量的內(nèi)容。
 *參數(shù)說明
 *name為環(huán)境變量的名稱,如果該變量存在則會(huì)返回指向該內(nèi)容的指針。
 *環(huán)境變量的格式為name=value。
 *返回值:執(zhí)行成功則返回指向該內(nèi)容的指針,找不到符合的環(huán)境變量名稱則返回NULL。
 */
- (void)getenv_test:(char *)env_name
{
    if(getenv(env_name))
    {
        printf("%s's value = %s",env_name,getenv(env_name));
    }
}

/**
 *putenv(改變或增加環(huán)境變量)
 *定義函數(shù) int putenv(const char * string);
 *函數(shù)說明:putenv()用來改變或增加環(huán)境變量的內(nèi)容。
 *參數(shù)
 *string的格式為name = value,
 *如果該環(huán)境變量原先存在,則變量?jī)?nèi) 容會(huì)依參數(shù)string改變,否則此參數(shù)內(nèi)容會(huì)成為新的環(huán)境變量。
 *返回值:執(zhí)行成功則返回0,有錯(cuò)誤發(fā)生則返回-1。
 */
- (void)putenv_test
{
    char *env_name = "test_two";
    if(putenv(env_name) == 0)
    {
        printf("%s = %d",env_name,putenv("test_two = two"));
    }
    
}

/**
 *unsetenv(移除環(huán)境變量)
 *定義函數(shù) unsetenv(const char *string);
 *函數(shù)說明:unsetenv()用來改變或增加環(huán)境變量的內(nèi)容。
 *參數(shù)
 *string為環(huán)境變量的名稱,
 *如果該環(huán)境變量原先存在,則移除該環(huán)境變量。
 *返回值:執(zhí)行成功則返回0,有錯(cuò)誤發(fā)生則返回-1。
 */
- (void)unsetenv_test
{
    char *env_name = "test_one";
    if(unsetenv(env_name) == 0)
    {
        printf("%s is unseted = %s",env_name,unsetenv(env_name) == 0 ? "yes" : "no");
    }
}
/**
setenv(改變或增加環(huán)境變量)
 *定義函數(shù) int setenv(const char *name,const char * value,int overwrite);
 *函數(shù)說明 setenv()用來改變或增加環(huán)境變量的內(nèi)容。
 *參數(shù) name為環(huán)境變量名稱字符串。
 *參數(shù) value則為變量?jī)?nèi)容。
 *參數(shù) overwrite用來決定是否要改變已存在的環(huán)境變量。
  如果overwrite不為0,則改變環(huán)境變量原有內(nèi)容,原有內(nèi)容會(huì)被改為參數(shù)value所指的變量?jī)?nèi)容。
  如果overwrite為0,且該環(huán)境變量已有內(nèi)容,則參數(shù)value會(huì)被忽略。
 *返回值 執(zhí)行成功則返回0,有錯(cuò)誤發(fā)生時(shí)返回-1
*/
- (void)setenv_test
{
    char *env_name = "test_one";
    char *env_value = "ooops";
    if(setenv(env_name,env_value,1) == 0)
    {
        printf("%s is seted = %s",env_name,setenv(env_name,env_value,1) == 0 ? "success" : "failed");
    }
}

我們要修改的模板如下的路徑中

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/
Library/Xcode/Templates/Project\ Templates/iOS/Application/Cocoa\ Touch\ Application\ Base.xctemplate
Snip20161020_1.png

打開文件,在文件中搜索如下代碼

<key>main.m:main:UIApplicationMain</key>
                        <string>@autoreleasepool {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
</string>

將其改為

<key>main.m:main:UIApplicationMain</key>
                        <string>@autoreleasepool {
    /*
     * 此行代碼是增加的代碼
     */
    setenv("OS_ACTIVITY_MODE", "DISABLE", 1);
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}

其目的是為了,在創(chuàng)建的Xcode項(xiàng)目的入口文件中增加添加環(huán)境變量的操作

效果如下

//
//  main.m
//  environment_variable
//
//  Created by 張強(qiáng) on 16/10/20.
//  Copyright ? 2016年 張強(qiáng). All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) 
{
    @autoreleasepool 
{
        setenv("OS_ACTIVITY_MODE", "disable", 1);
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

至此解決Xcode8創(chuàng)建新項(xiàng)目,控制臺(tái)會(huì)出現(xiàn)奇葩log的小缺陷!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容