2015-09-30 18 views
32

Tôi đang thiết lập Jenkins để tự động hóa quá trình xây dựng. Đặc biệt, đối với nhu cầu của tôi, tôi muốn có thể đặt các định danh gói khác nhau.Xcode 7: thay đổi mã định danh gói sản phẩm

Tôi đang sử dụng plugin Xcode Jenkins để thiết lập nhận dạng theo gói:

Jenkins Xcode plugin - Code signing & OS X keychain options

Vấn đề là điều này sẽ thay đổi nhận dạng theo gói trong file Info.plist và trong MyTarget> General> Bundle Định danh. Nhưng nó sẽ không thay đổi mã nhận dạng gói trong Cài đặt xây dựng> Bao bì> Mã định danh nhóm sản phẩm.

Điều tương tự cũng xảy ra nếu tôi thực hiện thủ công. tôi tạo ra một dự án mới trong Xcode 7. Theo mặc định, ba giá trị là:

Info plist beforetarget general beforepackaging

Khi tôi thay đổi giá trị trong file Info.plist như thế này:

Info plist changed

Hai giá trị còn lại sẽ là:

target general after packaging after

Vì vậy, cách bạn có thể thấy giá trị trong Cài đặt bản dựng không thay đổi. Nếu tôi đang ở Xcode tôi thay đổi giá trị đó theo cách thủ công, nhưng nếu tôi đang xây dựng dự án trong Jenkins thì đây là một vấn đề bis.

Bất kỳ ai cũng gặp phải vấn đề tương tự? Làm thế nào để bạn giải quyết nó?

Cảm ơn!

+0

Gặp phải vấn đề tương tự kể từ hôm nay. Tôi sử dụng lệnh shell 'plistbuddy' để thay đổi mã định danh gói. Nó thay đổi 'info.plist' nhưng không thay đổi mã nhận dạng gói bên trong cài đặt xây dựng trong xCode. –

+0

Big thanx, không nhận ra nó phải được thay đổi ở 3 nơi! – JOM

Trả lời

24

Đối mặt với cùng một vấn đề.

PRODUCT_BUNDLE_IDENTIFIER là một biến trong tệp project.pbxproj của bạn. Thay đổi điều đó thành bất kỳ thứ gì bạn muốn và nó sẽ phản ánh cả trong Info.plist của bạn cũng như các thiết lập của dự án.

+0

vì vậy tôi nên chuyển 'PRODUCT_BUNDLE_IDENTIFIER = $ CB_APP_ID' ​​thành xcodebuild, đúng không? –

+0

đã hoạt động. Đối với hồ sơ, tôi đang chuyển 'PRODUCT_BUNDLE_IDENTIFIER = $ CB_APP_ID' ​​vào lệnh' xcodebuild'. –

23

udit's answer là chính xác. Phương pháp hay nhất là đặt giá trị ID nhóm bó plist là $ PRODUCT_BUNDLE_IDENTIFIER. Sau đó, trong Cài đặt xây dựng, hãy sử dụng các cấu hình khác nhau (Gỡ lỗi, Phát hành .etc) để thiết lập ID gói khác nhau theo yêu cầu: enter image description here

Bạn không cần plugin xCode để thay đổi id gói nữa mà cần phải chỉ định cấu hình trong đó.

enter image description here

+1

trong hầu hết các trường hợp đó là thực hành tốt nhất, tôi đồng ý. Nhưng tôi muốn tất cả các thông số này có thể tùy chỉnh được. Về cơ bản, tôi muốn có một giao diện web là khách hàng có thể thêm tệp p12, hồ sơ cấp phép di động, nhận dạng gói và họ sẽ nhận được tùy chỉnh .ipa –

+1

@Aoke Li- Điều này có vẻ như là một cách tiếp cận tốt hơn. Tôi chỉ có một nghi ngờ với điều này. Khi tôi sử dụng các định danh gói khác nhau tùy thuộc vào cấu hình xây dựng, giá trị nào sẽ phản ánh trong cửa sổ tóm tắt chung của Xcode? –

+0

@Rashmi Ranjan mallick- Vì vậy, sau khi bạn thiết lập tập tin cấu hình của bạn và xây dựng tại địa phương, bạn sẽ thấy ID gói trong cửa sổ chung cũng đã được cập nhật. Và vì không có gì được tiêm trong jekins xây dựng thời gian cho khu vực này, nô lệ sẽ hoạt động chính xác như máy dev của bạn. –

11

Tham khảo this kiếm một giải pháp đơn giản để thay thế $ PRODUCT_BUNDLE_IDENTIFIER sử dụng lệnh shell như -

sed -i '' 's/com.example.oldbundleid/com.example.newbundleid/g' project.pbxproj

Bạn có thể vượt qua các biến của bạn cho phù sử dụng Jenkins/Shell.

Cách tiếp cận khác để thực hiện việc này là sử dụng mod-pbxproj.

python -m mod_pbxproj -b -af PRODUCT_BUNDLE_IDENTIFIER=com.example.newbundleid -rf PRODUCT_BUNDLE_IDENTIFIER=com.example.oldbundleid project.pbxproj All

// chỉnh sửa

Cũ bó id có thể được lấy bằng -

awk -F '=' '/PRODUCT_BUNDLE_IDENTIFIER/ {print $2; exit}' project.pbxproj

này có thể được lưu trữ trong một chuỗi biến và sử dụng thay cho com.example.oldbundleid

+1

Nó sẽ đẹp hơn với một giải pháp mà bạn không cần phải biết số nhận dạng gói cũ. – turingtested

+0

Cập nhật giải pháp của tôi. Nó tìm nạp giá trị ID nhóm đã lưu từ '.pbxproj' để thay thế. @turingtested –

+0

Tuyệt vời! Bạn chắc chắn biết Bash, cảm ơn bạn! – turingtested

3

Đối với xcode 8.x

Thay đổi tên ứng dụng trong Mục tiêu> your_app_name - Thông tin> thêm khóa thuộc tính mới không thực hiện thay đổi hoàn toàn tên ứng dụng ở mọi nơi trong suốt dự án.

Khi bạn thực hiện điều này, dự án của bạn chạy trơn tru trong mac của bạn (nghĩa là trong hệ thống mà bạn đã sử dụng để thực hiện các thay đổi này, vì tất cả các khóa thuộc tính của bạn & danh tính sẽ được lưu trong hệ thống của bạn). Khi bạn cố gắng sử dụng dự án của mình trong một hệ thống khác, bạn sẽ gặp phải lỗi lạ khi dự án của bạn bị thiếu nếu trong trường hợp bạn sử dụng nhóm trong dự án của mình.

Vì vậy, để khắc phục điều này, tất cả các bạn phải thực hiện một số thay đổi trong cài đặt Xây dựng, để lại tab Chung và tab Thông tin bị ảnh hưởng.

Dưới Mục tiêu> Thiết lập bản dựng, cuộn đến Bao bì.

Thay đổi của bạn Tên sản phẩm với mong muốn tên & sản phẩm bó định danh đến cái mới. Khi bạn thực hiện việc này, tự động hiển thị tên dự án của bạn & thay đổi id theo gói thành tab mới trong tab Chung.

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