2013-01-08 30 views
13

Tôi có một ứng dụng iOS có sử dụng SSO với Facebook như một phần của việc ứng dụng của bạn để làm việc với SSO của Facebook, bạn phải xác định FacebookAppId và url callback trong info.plist. Tôi có 2 nhóm Facebook khác nhau để thử nghiệm và một nhóm cho sản xuất. Tôi muốn để có thể có các giá trị của hai phím nêu trên bộ dựa trên chỉ thị tiền xử lý.Sử dụng định nghĩa preprocessor trong iOS App info.plist

Trong tôi MessageBomb-Prefix.pch tôi có những điều sau đây, trong đó hoạt động tốt:

#ifdef TEST 
    //Development environments 
    #define PARSE_APP_ID "dev parse app id" 
    #define PARSE_CLIENT_ID "dev parse client id" 
    #define FB_APP_ID "dev facebook id" 
#else 
    //Production environments 
    #define PARSE_APP_ID "prod parse app id" 
    #define PARSE_CLIENT_ID "prod parse client id" 
    #define FB_APP_ID "prod facebook id" 
#endif 

Tuy nhiên trong info.plist của tôi tôi đã làm dưới đây, nhưng nó dường như không làm việc:

<key>CFBundleURLTypes</key> 
    <array> 
     <dict> 
      <key>CFBundleTypeRole</key> 
      <string>Editor</string> 
      <key>CFBundleURLSchemes</key> 
      <array> 
       <string>fb${FB_APP_ID}</string> 
      </array> 
     </dict> 
    </array> 
    <key>FacebookAppID</key> 
    <string>${FB_APP_ID}</string> 

là nó thậm chí có thể làm những gì tôi đang cố gắng làm. Tôi đã thiết lập dự án để tiền xử lý info.plist.

Cảm ơn Peter

+1

Bạn có nó bật trong cài đặt dự án bằng cách thiết lập preprocess Info.plist File để Yes? –

+0

@AndrewTetlaw bạn nên làm cho câu trả lời đó. (Và có lẽ bao gồm một số chi tiết về cách chỉ định bộ tiền xử lý bao gồm các tệp?) –

+0

OK Tôi sẽ làm điều đó –

Trả lời

8

Các preprocessor Info.plist sẽ cho phép bạn sử dụng xây dựng các thiết lập trong Info.plist của bạn, không #define s. Vì vậy, bạn có thể định nghĩa FB_APP_ID như một người dùng tùy chỉnh thiết lập trong mục tiêu của bạn xây dựng (và cung cấp cho nó quan trọng hơn cho các chương trình khác nhau), và giá trị này sau đó sẽ có sẵn cho Info.plist. Tuy nhiên, cài đặt người dùng xây dựng không được tiếp xúc với mã của bạn. Đó là, trừ khi bạn muck với Preprocessor định nghĩa của bạn xây dựng thiết lập và thêm một mục mà trông giống như

[email protected]\"$(FB_APP_ID)\" 

(Dấu gạch chéo ngược được yêu cầu để có được hai dấu ngoặc kép quá khứ gọi vỏ)

Nếu ID ứng dụng của bạn có thể chứa khoảng trắng, sau đó bạn sẽ cần phải thêm dấu ngoặc kép để có được quá khứ gọi shell:

FB_APP_ID="@\"$(FB_APP_ID)\"" 

cuối cùng, bạn sẽ phải xây dựng thiết lập mà trông giống như sau:

Build settings

+0

cho những người tự hỏi cách sử dụng cài đặt xây dựng do người dùng xác định trong tệp plist, đặt giá trị như vậy, giả sử bạn đã thực hiện cài đặt xây dựng do người dùng xác định có tên IS_FILE_SHARING_ENABLED: $ {IS_FILE_SHARING_ENABLED}

14

Nếu bạn đi vào Cài đặt Xây dựng, bạn có thể thiết lập Preprocess Info.plist File-YES và sau đó thiết lập Info.plist Preprocessor Prefix File vào một tập tin .h bạn đã đặt trong dự án của bạn với #define chỉ thị.

Ví dụ: nếu tôi thêm khóa vào Info.plist tệp: testKey với giá trị TEST_VALUE. Sau đó, tôi đặt test.h trong dự án của tôi với:

#define TEST_VALUE hello_world 

Và sau đó tôi đặt Preprocess Info.plist File-YESInfo.plist Preprocessor Prefix File-test.h

Giá trị của key đó, khi lấy ra bây giờ là "hello_world". Nếu bạn thay đổi giá trị của macro rất nhiều bạn có thể tìm thấy bạn cần phải làm sản phẩm/Làm sạch để xem những thay đổi vì XCode dường như bộ nhớ cache giá trị biên soạn.

+1

Tôi không thể tìm thấy cài đặt "Preprocess Info.plist File" trong Xcode 4.6 nữa. Bất cứ ai biết làm thế nào để sửa đổi nó? – Jeremy

+1

Đừng bận tâm, tôi đã chọn cấp độ "Cơ bản" chứ không phải "Tất cả". – Jeremy

+0

Tôi làm sạch sản phẩm và thậm chí xóa dữ liệu có nguồn gốc và nó vẫn sử dụng giá trị id ứng dụng Facebook cũ của tôi. Tôi phải xây dựng lại và làm sạch lại và xóa bộ nhớ cache khoảng 20 lần cho những thay đổi mới. – Bot

6

Để truy cập vào plist:

Tạo một biến mới
enter image description here


Xác định nó
enter image description here


Sử dụng nó trong plist thông tin của bạn
enter image description here

+0

Làm thế nào để bạn truy cập nó trong mã? –

+0

Rất tiếc, không thể truy cập trực tiếp vào mã xác định người dùng. Bạn cần phải thêm vào "các macro tiền xử lý". Bạn có thể viết macro tiền xử lý khai báo giá trị của người dùng xác định "FOO = $ {FOO}". Sau đó, bạn có thể truy cập FOO trong mã. – hfossli

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