2015-07-28 21 views
16

Tôi gặp vấn đề mà tôi không thể tìm ra và tôi đã tìm kiếm ở mọi nơi.Sử dụng Đăng nhập bằng Google với hai mục tiêu

Gần đây tôi đã thêm Đăng nhập bằng Google vào ứng dụng của mình và nó hoạt động tốt trên mục tiêu chính, vì tôi đang sử dụng nhiều mục tiêu để triển khai phiên bản thứ cấp của ứng dụng. được thêm vào "GoogleService-Info.plist". Mã đăng nhập Google đề cập đến tệp này theo tên, vì vậy tôi không thể chỉ thay đổi tên cho mỗi phiên bản của ứng dụng như tôi đã thực hiện cho các lệnh khác.

Tôi đã thử thêm biến môi trường vào mỗi lược đồ và sử dụng $ {BUNDLE_ID} trong plist để thay đổi dựa trên lược đồ đã chọn, nhưng nó cũng không hoạt động. Có cái gì tôi đang mất tích? Làm thế nào nên một không gian làm việc với nhiều mục tiêu sử dụng cùng một plist với các biến khác nhau cho mỗi mục tiêu?

Cảm ơn!

Chỉnh sửa: Đã thử sử dụng tệp XCConfig để thay thế các giá trị tĩnh trong plist bằng các biến biên dịch. Không may mắn, có lẽ vì tôi cho rằng Đăng nhập bằng Google đang truy cập tệp trực tiếp. Tôi cho rằng bất kỳ ai sử dụng Đăng nhập bằng Google với một ứng dụng có nhiều mục tiêu (hỗ trợ quảng cáo so với phí bảo hiểm trả phí) phải có cách để giải quyết vấn đề này. Hãy giúp tôi.

+1

Bạn đã xem các giai đoạn xây dựng tùy chỉnh trong Xcode chưa? Tạo một pha cho mỗi mục tiêu sao chép plist mong muốn vào GoogleService-Info.plist. – rascal2210

+0

Bạn có thể hình dung ra điều này không? Tôi đang cố gắng thiết lập Đăng nhập bằng Google với hai mục tiêu và một tài khoản hoạt động tốt và mặt khác, chế độ xem Chế độ đăng nhập xuất hiện nhưng không có nút "Hủy". Kỳ dị. – Adama

+0

Chưa, không. Tôi có thể sẽ lại truy cập lại vấn đề này vào tháng 10 để bắt đầu một đợt phát hành phiên bản phụ khác của tôi vào cửa hàng ứng dụng. Bạn có quản lý để nhận hai ID gói riêng cho các phiên bản khác nhau của mình không? – NCIXGreg

Trả lời

25

Tôi gặp vấn đề tương tự và tôi đã tìm thấy một giải pháp khá đơn giản.

Chỉ cần sao chép GoogleServices-Info.plist và đặt nó vào một thư mục khác. Thư mục phải là một thư mục khác nhau, vì hệ thống tệp sẽ không chấp nhận cùng một tên tệp trong cùng một thư mục. Vì vậy, tạo một thư mục thực sự trong công cụ tìm và thêm nó vào XCode, không sử dụng các nhóm XCode.

Sau đó thay đổi thành viên mục tiêu theo từng tệp plist. Đó là nó!


+0

Thanh lịch! @tentmaking nợ bạn "Tôi yêu bạn" quá! –

+0

Hey Raphael Bạn đã làm thế nào để làm việc này trong một thư mục? Google dường như muốn nó trong thư mục gốc, và dự án của tôi bị treo trên mục tiêu thứ hai. Lời khuyên nào sẽ rất được đánh giá cao! – CodeNoob

+1

Google chỉ cần quyền truy cập vào tệp trong gói. Chừng nào nó còn trong bó thì không sao, dù thư mục nằm ở đâu. Bên dưới mục tiêu của bạn/Xây dựng giai đoạn/Sao chép tài nguyên gói, bạn có thể xem tệp nào được sao chép vào nhóm mục tiêu của bạn. – Raphael

7

Tôi gặp vấn đề tương tự. Tôi có bốn mục tiêu khác nhau cần sử dụng cùng một tệp GoogleService-Info.plist nhưng với các bundleID khác nhau. Tôi tình cờ gặp phải điều này excellent article from Restless Thinker cung cấp giải pháp cho vấn đề chính xác này.

PlistBuddy là một công cụ miễn phí được cung cấp bởi Apple và được tích hợp sẵn trong OSX.!

PlistBuddy có thể tạo và sửa đổi tệp plist. Here's a great tutorial by Fotis. Anh ấy làm cho nó trông giống như một miếng bánh.

Điều đầu tiên là bạn kiểm tra xem tệp GoogleService-Info.plist có được liệt kê trong phần Xây dựng giai đoạn> Sao chép tài nguyên cho từng mục tiêu hay không. Điều này đã được đưa ra, nhưng một kiểm tra lại sẽ không bị tổn thương. Thêm tệp nếu nó không có.

Điều tiếp theo bạn cần làm là tạo một Giai đoạn xây dựng mới cho từng mục tiêu. Chuyển đến Dự án> Mục tiêu> Chọn mục tiêu của bạn> Tạo giai đoạn Kiểm tra phần trên cùng bên trái của màn hình Xây dựng giai đoạn cho nút +.

Thêm giai đoạn tùy chỉnh mới. (Bạn có thể đã có giai đoạn Run Script, trong trường hợp này, chỉ cần tiếp tục bổ sung các lệnh sau lệnh hiện tại của bạn)

Chọn New Run Script Giai đoạn và trong hộp mới mở ra, nhập lệnh PlistBuddy bạn

/usr/libexec/PlistBuddy -c "Set :BUNDLE_ID ${PRODUCT_BUNDLE_IDENTIFIER}" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist 

Đảm bảo tên tệp .app (trong Sản phẩm) giống với tên mục tiêu của bạn hoặc tên này sẽ không hoạt động. Bạn có thể $ TARGET_NAME.app để làm cho nó giống như tên project.app của bạn.

Bạn có thể thay đổi nhiều giá trị theo cách này, chỉ cần thêm một dòng mới khác vào tập lệnh. Bạn sẽ cần phải thêm hai dòng nữa ít nhất để thay đổi CLIENT_ID và REVERSE_CLIENT_ID.

/usr/libexec/PlistBuddy -c "Set :CLIENT_ID 123456789012-abcdefghijklmnopqrstuvwxyzabcdefghijklm.apps.googleusercontent.com" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist 
/usr/libexec/PlistBuddy -c "Set :REVERSED_CLIENT_ID com.googleusercontent.apps.123456789012-abcdefghijklmnopqrstuvwxyzabcdefghijklm" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist 

Bạn có thể phải dọn dẹp để hoạt động. Xây dựng và chạy trên thiết bị. Bạn có thể cần phải chọn hộp nhỏ bên dưới Tập lệnh chạy có nội dung 'Chạy tập lệnh chỉ khi cài đặt' khi cài đặt trên thiết bị.Khi tôi bỏ chọn hộp này, XCode giữ liên quan đến dữ liệu gốc đã có của tôi.

Sử dụng PlistBuddy, bạn có thể thay đổi bất kỳ giá trị plist nào dựa trên mục tiêu. Hy vọng điều này đã giúp.

+0

Tôi yêu bạn. Cảm ơn! – tentmaking

0

tạo một tập tin plist riêng biệt cho từng mục tiêu và tự động chuyển đổi giữa chúng. để làm điều đó, bạn có thể kiểm tra câu trả lời here

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