Quy tắc bản dựng Xcode

Hầu hết các loại dự án Xcode đều hỗ trợ quy tắc tạo. Điều này cho phép nhà phát triển sửa đổi cách tạo loại tệp hiện có và xác định cách tạo loại tệp mới. Tập lệnh J2ObjC được thiết kế có chủ đích để cắm vào các hệ thống xây dựng như Xcode.

Dự án j2objc-sample-reversi là một ví dụ về cách thêm nguồn Java vào một trò chơi đơn giản trên iOS.

Bản dựng tối thiểu yêu cầu cập nhật chế độ cài đặt bản dựng, sau đó thêm quy tắc xây dựng J2ObjC.

Cập nhật chế độ cài đặt bản dựng

  1. Nhấp vào dự án trong Project Navigator (Trình điều hướng dự án) để mở Project Editor (Trình chỉnh sửa dự án) và đảm bảo mục tiêu ứng dụng được chọn.
  2. Nhấp vào thẻ Build Settings (Cài đặt bản dựng).
  3. Liên kết thư viện mô phỏng JRE (jre_emul) bằng cách thêm -ljre_emul vào Cờ trình liên kết khác. Ứng dụng sẽ có dạng như sau: Liên kết Thư viện mô phỏng JRE trong Xcode
  4. Nhấp vào dấu + để chọn Thêm chế độ cài đặt do người dùng xác định.
  5. Đặt tên cho chế độ cài đặt là J2OBJC_HOME và đặt giá trị cho vị trí của J2ObjC. Đây phải là thư mục kết quả sau khi giải nén tệp phát hành zip hoặc thư mục j2objc/dist nếu bạn đã biên dịch từ nguồn và thư mục gốc của bạn là j2objc.
  6. Trong Đường dẫn tìm kiếm, hãy sửa đổi những nội dung sau:
    • Đường dẫn tìm kiếm khung thêm ${J2OBJC_HOME}/frameworks
    • Library Search Path (Đường dẫn tìm kiếm thư viện) thêm ${J2OBJC_HOME}/lib (cho mỗi cấu hình bản dựng).
    • Đường dẫn tìm kiếm tiêu đề người dùng thêm ${J2OBJC_HOME}/include.
  7. Xác nhận chế độ cài đặt của bạn bằng cách tìm J2OBJC_HOME. Bạn sẽ thấy nội dung tương tự như sau: Cài đặt bản dựng Xcode

Thêm quy tắc tạo J2ObjC

  1. Xác định thư mục gốc của tệp nguồn Java mà chúng tôi sẽ gọi là $source-root. Thư mục gốc là thư mục chứa gói cấp cao nhất của các tệp nguồn.

    • Nếu sử dụng git và muốn lấy các tệp Java từ một dự án git khác, bạn có thể thêm một mô-đun con theo dõi dự án bằng các nguồn Java của mình. Ví dụ: giả sử dự án Xcode của bạn (xcodeproj) nằm trong ~/dev/MyProject, thì có thể bạn có một thư mục MyProject khác chứa nguồn Objective-C. Trong thư mục ~/dev/MyProject/MyProject, hãy chạy git submodule add git@github.com:user/javaproject để tạo thư mục ~/dev/MyProject/MyProject/javaproject có nguồn cho dự án Java ngay bên cạnh nguồn Objective-C. Sau đó, bạn có thể kéo thư mục đó vào dự án Xcode trong nhóm MyProject có Xcode phản chiếu hệ thống tệp của bạn. ${PROJECT_DIR}/MyProject/javaproject/src$source-root.

    • Nếu các nguồn Java của bạn nằm trong một nhóm hoặc thư mục trong dự án Xcode của bạn, thì $source-root sẽ là ${PROJECT_DIR}/__group_or_directory_name__.

    • Nếu nghi ngờ, hãy nhấp chuột phải vào nhóm hoặc thư mục đó rồi chọn Hiển thị trong Trình tìm kiếm để xem thư mục và sử dụng đường dẫn tuyệt đối.

    • Ví dụ: nếu bạn có một gói Java foo.bar trong thư mục có tên là ~/myproject/src, thì các tệp Java của gói đó phải nằm trong ~/myproject/src/foo/bar/**.java – điều đó có nghĩa là ~/myproject/src là thư mục gốc của dự án.

    • Nếu các tệp nguồn Java nằm ngoài dự án Xcode, hãy nhập đường dẫn đầy đủ được dùng khi liệt kê các tệp đó trong cửa sổ dòng lệnh.

  2. Nhấp vào dự án trong Project Navigator (Trình điều hướng dự án) để mở Project Editor (Trình chỉnh sửa dự án) và đảm bảo mục tiêu ứng dụng được chọn.

  3. Nhấp vào thẻ Build Rules (Quy tắc tạo bản dựng).

  4. Nhấp vào dấu + để thêm quy tắc tạo.

  5. Đối với tùy chọn Quy trình của quy tắc mới, hãy chọn "Tệp nguồn Java". Lựa chọn Sử dụng sẽ là "Tập lệnh tuỳ chỉnh:".

  6. Trong hộp văn bản tập lệnh tuỳ chỉnh, hãy thêm nội dung sau (nhớ thay thế $source-root):

    if [ ! -f "${J2OBJC_HOME}/j2objc" ]; then echo "J2OBJC_HOME is not correctly defined, currently set to '${J2OBJC_HOME}'"; exit 1; fi;
    "${J2OBJC_HOME}/j2objc" -d ${DERIVED_FILE_DIR} -sourcepath "$source-root" --no-package-directories -g ${INPUT_FILE_PATH};
    
  7. Trong bảng điều khiển Output Files (Tệp đầu ra), hãy nhấp vào nút + rồi thêm: ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h.

  8. Nhấp lại vào nút + rồi thêm ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m.

Khi bạn hoàn tất, bảng cài đặt sẽ có dạng như sau (lưu ý: kể từ 10.2, Xcode vẫn xác định biến DERIVED_FILES_DIR giống như DERIVED_FILE_DIR để có khả năng tương thích ngược):

Quy tắc tạo Xcode

Liên kết các thư viện bổ sung

Bước tạo đường liên kết (giai đoạn xây dựng "Link Binary with Libraries" (Liên kết nhị phân với thư viện) của Xcode) cần cờ dành riêng cho J2ObjC, cờ này thay đổi tuỳ thuộc vào cách ứng dụng sử dụng các lớp Java đã dịch. Để xem danh sách đầy đủ, hãy tham khảo phần Cài đặt liên kết bắt buộc. Dưới đây là một số ví dụ về những thư viện bổ sung mà bạn có thể cần liên kết:

  • Để sử dụng gói java.util.zip, bạn phải liên kết thư viện libz.dylib bằng cách thêm -ljre_zip vào Cờ trình liên kết khác.
  • Để tạo hàm băm an toàn, bạn phải thêm Khung bảo mật vào dự án của mình.

Gỡ lỗi các sự cố bản dựng

Nếu Xcode báo cáo lỗi bản dựng ở các bước này, hãy mở Issue Navigator (Trình điều hướng vấn đề) rồi nhấp vào một lỗi để kiểm tra thông tin chi tiết. Thao tác này sẽ hiển thị thông tin chi tiết về câu lệnh dòng lệnh đã được thực thi. Sau đây là một số lỗi thường gặp:

  • Lớp không phân giải được – Rất có thể, $source-path bạn sử dụng không chính xác. Tìm tuỳ chọn -sourcepath trong lệnh đã thực thi và đảm bảo tuỳ chọn này trỏ đến thư mục gốc của tệp nguồn Java.

  • Không tìm thấy tệp"JreEmulation.h" – Có thể vấn đề là do giá trị Đường dẫn tìm kiếm tiêu đề người dùng không hợp lệ. Tìm kiếm lệnh tạo bản dựng cho tuỳ chọn -I theo đường dẫn; nếu có vẻ ổn, hãy sao chép đường dẫn (không phải -I) và trong cửa sổ dòng lệnh, chạy ls bằng đường dẫn đó để xác minh không có lỗi chính tả.

  • "_IOSClass_FromClass", được tham chiếu từ: hoặc "_OBJCCLASS$_Java"Đường dẫn tìm kiếm thư viện không chính xác hoặc bạn quên liên kết thư viện mô phỏng JRE bằng cách đặt Cờ trình liên kết khác thành -ljre_emul. Bạn cũng có thể cần liên kết thêm các thư viện.

  • Ký hiệu không xác định: _iconv* – Đường liên kết trong thư viện iconv bắt buộc.

Nếu bạn vẫn gặp vấn đề, hãy yêu cầu nhóm j2objc-discuss.