2014-12-03 10 views
10

Tôi đã cài đặt plugin Xcode cho XcodeColors từ robbie hanson. (xem https://github.com/robbiehanson/XcodeColors)Làm thế nào tôi có thể nhận được biến môi trường từ Xcode trong ứng dụng của tôi

Nếu tôi thử nghiệm nó trong một sân chơi

let dict = NSProcessInfo.processInfo().environment 
let env = dict["XcodeColors"] as? String 

env sẽ là "CÓ".

Nhưng, nếu tôi sử dụng cùng một mã trong ứng dụng của mình, env sẽ không phải là do ứng dụng đang chạy trên quy trình của riêng chúng.

Bởi vì tôi sẽ in ra văn bản màu với chuỗi esc cụ thể chỉ khi plugin được cài đặt, tôi muốn nhận được thông tin về Xcode env var.

Tôi có thể làm như thế nào?

+0

Tôi đang gặp cùng một vấn đề. Bạn đã khám phá ra một giải pháp chưa? – Tiago

Trả lời

12

Chỉnh sửa lược đồ của bạn -> Chọn phần "Chạy" -> Chọn tab "Đối số" -> Thêm biến môi trường.

Hãy cẩn thận, các biến môi trường không được đặt nếu bạn chạy ứng dụng mà không có XCode.

+0

cảm ơn, cách tiếp cận này tôi cũng sử dụng. Nhưng, nếu tôi chia sẻ nguồn của mình cho một nhà phát triển khác, tôi phải giải thích phải làm gì, có cài đặt XcodeColors hay không. Tôi muốn tự động làm điều đó từ ứng dụng của mình. – MUECKE446

+0

Lưu ý rằng Xcode không được BASH chạy, do đó môi trường được xác định ở đây, chỉ tồn tại trong Xcode. – Efren

+0

Xem thêm một blog hữu ích từ NSHipster về các cài đặt môi trường có sẵn: http://nshipster.com/launch-arguments-and-environment-variables/ – Efren

2

Tôi đã gặp sự cố tương tự với XcodeColors. Tôi đã kết thúc việc giải quyết nó với một giai đoạn xây dựng kịch bản đơn giản. Nó kiểm tra xem XcodeColors có được cài đặt hay không và đặt/thêm khóa vào Info.plist trong bản dựng. Vì vậy, tạo ra một mới "Run Script Xây dựng Giai đoạn" và đặt điều này trong đó:

xcodeColorsDir="$USER_LIBRARY_DIR/Application Support/Developer/Shared/Xcode/Plugins/XcodeColors.xcplugin/" 
xcodeColorsInstalled=0 
if [ -d "$xcodeColorsDir" ]; then 
    # Directory exists, therefore, XcodeColors is installed 
    xcodeColorsInstalled=1 
fi 

infoPlistPath="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" 
existingValue=$(/usr/libexec/PlistBuddy -c "Print :XcodeColorsInstalled" "$infoPlistPath") 
if [ -z "$existingValue" ]; then 
    # Key already exists so overwrite it 
    /usr/libexec/PlistBuddy -c "Add :XcodeColorsInstalled bool $xcodeColorsInstalled" "$infoPlistPath" 
else 
    # Key doesn't exist yet 
    /usr/libexec/PlistBuddy -c "Set :XcodeColorsInstalled $xcodeColorsInstalled" "$infoPlistPath" 
fi 

Sau đó, bạn có thể truy cập vào param Info.plist trong thời gian chạy với một cái gì đó như:

func isColorizedLoggingEnabled() -> Bool { 
    if let colorizedLoggingEnabled = NSBundle.mainBundle().infoDictionary?["XcodeColorsInstalled"] as? Bool { 
     return colorizedLoggingEnabled 
    } else { 
     return false 
    } 
} 
Các vấn đề liên quan