Build Multi-App from 1 source XCode
ios
43
XCode
3
Multi-App
1
White

Viên Vũ viết ngày 16/07/2015

Có bao giờ bạn gặp phải trường hợp muốn làm 2 app giống nhau gần như hoàn toàn chỉ khác nhau ở chỗ thay màu sắc thay một số tên hay thay đổi data của nó chưa? (Bạn nào hay làm app từ điển hoặc chuyên đi clone app chắc sẽ hay gặp hehe :P) Giờ các bạn xử lý thế nào bây giờ? Bình thường nếu là minh thì mình sẽ clone thẳng source ra rồi thay đổi những thứ cần đổi. Thế nhưng khi làm 3 app thì sao, khi các bạn phát hiện ra bug thì sao bây giờ? 1 bug mà 3 cái app bị, 3 source code cần sửa. Thật là thảm hoạ. Có vẻ giải pháp này không hay ho cho lắm. Thật may quá XCode có cung cấp một công cụ giúp chúng ta làm việc này một cách khá dễ dàng: Multi-target trong 1 project. Giờ chúng ta cùng tìm hiểu xem làm thế nào nhé.

Tạo 1 target mới trong XCode

Select info Project các bạn sẽ thấy:
Screen Shot 2015-07-16 at 10.05.23 PM

Các bạn để ý mục target, đó chính là những sản phẩm các bạn tạo được khi build project với những schema khác nhau. Giờ muốn clone app, đầu tiên các bạn duplicate target hiện tại ra, lúc này bạn sẽ có target mới y change target cũ. và lúc này sẽ có 1 file plist mới cho target này.

Screen_Shot_2015-07-16_at_10_30_47_PM

Để đổi tên theo ý muốn của mình, các bạn search tên vừa mới copy tạo ra trong build -setting và đổi tên Product Name theo ý muốn. Nếu đổi tên file plist thì thay tên plist trong build-setting luôn.
Screen_Shot_2015-07-16_at_10_33_54_PM
Giờ các bạn để ý shema phía trên tên chưa khớp nhau giờ làm sao rename cho nó khớp để build ko bị lộn :D. Các bạn vào manage Schema.
alt
remove het schema hiện tại. Và tạo lại schema mới tương ứng với cái target của các bạn.
alt

Thiết lập Image Asset và Lauch Screen cho từng Target

Đối mỗi mỗi file hay như thư mục Images.xcassets, các bạn để ý mũi tên bên phải trong hình trên đều có target membership. Có nghĩa là file đó build cho những target được lựa chọn. Do đó muốn thiết lập file nào ảnh nào các bạn chỉ cần đưa vào project và lựa chọn target cho phù hợp.
Screen_Shot_2015-07-16_at_10_37_02_PM

Ở đây có nhiều cách thiết lập. Và đây là cách của mình

Screen_Shot_2015-07-16_at_10_53_42_PM

Mình chia resoure ra theo từng tên app đối với những thứ ko xài chung được. và trong đó sẽ được tick vào target phù hợp. Những thứ xài chung thì bỏ vào global resource tick vào toàn bộ target. Chi tiết các bạn có thể xem trong demo. Lưu ý quan trọng ở đây là dấu tick vào target thích hợp.

Thiết lập cho các đường link và thiết lập khác

Phía trên là cho các file ảnh. Thế còn trường hợp các bạn code app client server thì sao, mỗi app là một server khác nhau vậy thì nên làm thế nào giờ.

Các bạn tạo một file (mình đặt tên là projectdefine) rồi địnhg nghĩa link biến chưa link mà các bạn muốn với từ khoá extern:

extern const NSString * const productionURL;

Tiếp theo bạn tạo define dành riêng cho từng target:

const NSString * const productionURL = @"http://feelgrafix.com/data_images/out/15/899679-sunrise-wallpaper.jpg";

Khi sử dụng các bạn chỉ cần lấy

NSString *ImageURL = productionURL;

Lúc này thì XCode tự động lấy đúng cho bạn. Chi tiết các bạn coi ở demo nhé.

Xử lý những logic khác nhau của các target

Còn trường hợp các target khác nhau có đôi khi cần những logic nhỏ khác nhau thì sao? Chúng ta xử lý thế nào?
Các bạn define marcro cho nó rồi xử lý:
Screen_Shot_2015-07-16_at_10_57_30_PM
Khi đó vào code các bạn xử lý


#ifdef APP2

    self.lblTestMacro.hidden = YES;

#endif

Code các bạn có thể tham khảo tại: Demo

Thắc mắc hoặc góp ý gì các bạn có thể comment phía dưới. Cảm ơn các bạn.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Viên Vũ

3 bài viết.
3 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
3 1
Nhân một dịp làm với status bar iOS, mình muốn điên lên với nó. Không hiểu cơ chế nó chạy thế nào và hàm nào để set. Và sau khi search tìm hiểu mãi...
Viên Vũ viết hơn 2 năm trước
3 1
White
2 0
Hôm nay mình tiếp tục trình bày với các bạn những tìm hiểu của mình về orientation trong iOS. Trước tới giờ mình không phải làm app với landscape b...
Viên Vũ viết hơn 2 năm trước
2 0
Bài viết liên quan
White
2 3
Xin chào mọi người. Mình xin chia sẽ một UILabel Helper nhỏ dùng trong truờng hợp cần tính chiều cao của UILabel để xác định "Show More" button có ...
DonDinh viết gần 3 năm trước
2 3
White
11 2
Hồi mới bắt đầu code ObjectiveC, mỗi lần chọn màu không phải màu thông thường thì lại phải dùng 1 tool khác để lấy mã RBG rồi mới chèn vào code: ...
noname viết hơn 2 năm trước
11 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
3 bài viết.
3 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!