2015-12-03 12 views
15

tôi đã xây dựng cấu hình khác nhau (Debug, Stage, Prod) được xác định cho ứng dụng của tôi và tôi sử dụng User-Defined xây dựng thiết lập:Sử dụng User-Defined xây dựng các thiết lập trong tùy chỉnh plist nộp

enter image description here

thành lập Facebook đăng nhập và các công cụ khác trong Info.plist file:

enter image description here

trong kịch bản này, $(USER_DEFINED_SETTINGS) ký hiệu hiện hoạt động.

Khi tôi cố gắng thiết lập Google signin, đòi hỏi sử dụng thêm .plist file (GoogleService-Info.plist), và tôi sử dụng User-Defined thiết lập trong cùng một cách tôi làm trong các tập tin Info.plist, nó không hoạt động .

Tôi làm cách nào để sử dụng Cài đặt do người dùng xác định trong các tệp tùy chỉnh .plist? Nếu tôi không thể, làm thế nào tôi có thể giải quyết vấn đề này?

Trả lời

28

Đó là KHÔNG thể sử dụng User-Defined thiết lập trong tùy chỉnh tập tin plist, vì vậy bạn phải xử lý việc này theo cách khác.

Mặc dù, bạn có thể sao chép tùy chỉnh của bạn plist nộp đúng nơi:

  1. Tạo một thư mục mới (ví dụ: GoogleServiceInfoPlists).
  2. Sao chép có tất cả các file plist cho từng môi trường (ví dụ: GoogleService-Info-Debug.plist,GoogleService-Info-Stage.plistGoogleService-Info-Prod.plist).
  3. Thêm mới Run Script Phase (Xcode: Mục tiêu-> Giai đoạn xây dựng -> nút "+").
  4. Sử dụng kịch bản dưới đây để sao chép (thay thế) tập tin plist cho môi trường nhất định vào thư mục chính (đó là src trong trường hợp của tôi):

    cp "${SRCROOT}/src/Resources/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist" "${SRCROOT}/src/GoogleService-Info.plist" 
    

${SRCROOT} - được xác định trước, nó trỏ đến vị trí dự án của bạn .

$CONFIGURATION - được xác định trước, đó là cấu hình bản dựng của bạn, trong trường hợp của tôi: Debug, Stage, Prod. Bạn có thể thay đổi điều này trong Xcode: Project (không phải mục tiêu!) ->Thông tin.

Xin lưu ý rằng src/GoogleService-Info.plist tập tin phải được thêm vào dự án Xcode (Build Phases-> Sao chép Bundle Resource s) trong khi /src/Resources/GoogleServiceInfoPlists/GoogleService-Info-* tập tin không cần thiết.

UPDATE:

Hãy nhớ rằng bạn mới Run Script phải được đặt trước Sao chép Bundle Tài xây dựng giai đoạn. Nếu không, nó sẽ không hoạt động vì nó sẽ được sao chép quá muộn và phiên bản mặc định của tệp .plist sẽ được sử dụng.

+1

+1 Mặc dù tôi không thích giải pháp, nhưng tôi không thể tìm được cách nào khác để đạt được nó. Google nên cung cấp ít nhất cách để thay đổi số nhận dạng theo dõi thông qua API (và không sửa đổi chính bản thân .plist). – GoRoS

+0

@GoRoS Tôi đồng ý nó không phải là giải pháp tốt nhất tôi có thể tưởng tượng, nhưng không may, đó là cách duy nhất tôi có thể đạt được điều đó sau khi dành rất nhiều thời gian để giải quyết điều này một cách độc đáo. – KlimczakM

+1

Tôi nghĩ bạn có thể sử dụng $ {USER_DEFINED_SETTINGS} không phải trong một plist tùy chỉnh, nhưng trong Info.plist của dự án của bạn, nhưng tôi chưa thử nó. – dan

1

Tôi đặt hai tệp có cùng tên GoogleService-Info.plist vào dự án của tôi.

enter image description here

Một là cội rễ và một là trong một thư mục có tên 'dàn', để tránh một cuộc xung đột đặt tên trong hệ thống tập tin.

Include the plist in only one project each

Bao gồm một trong một mục tiêu và một ở khác làm cho nó để mỗi mục tiêu có một file plist độc đáo với tên chính xác.

Các vấn đề liên quan