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 xây dựng, cho phép nhà phát triển sửa đổi cách tạo các loại tệp hiện có và xác định cách tạo loại tệp mới. Các tập lệnh J2ObjC được thiết kế có chủ đích để đưa vào các hệ thống xây dựng như Xcode.

Dự án j2objc-sample-reversi là 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 rồi thêm quy tắc bản 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ác cờ trình liên kết khác. Ứng dụng sẽ hiển thị như sau: Liên kết Thư viện mô phỏng JRE trong Xcode
  4. Nhấp vào dấu + rồi 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 J2OBJC_HOME và thiết lập giá trị thành vị trí của J2ObjC. Thao tác này sẽ hoặc là thư mục kết quả khi giải nén tệp zip của bản phát hành hoặc thư mục j2objc/dist nếu bạn biên dịch từ nguồn và thư mục gốc là j2objc.
  6. Trong Đường dẫn tìm kiếm, sửa đổi các nội dung sau:
    • Đường dẫn tìm kiếm khung thêm ${J2OBJC_HOME}/frameworks
    • Đườ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 trong 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 kiếm J2OBJC_HOME. Bạn sẽ thấy mã 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 ta sẽ gọi là $source-root. Thư mục gốc là thư mục chứa phần đầu gói tệp nguồn của bạn.

    • Nếu bạn sử dụng git và muốn lấy các tệp Java của mình 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 Java nguồn. Ví dụ: giả sử dự án Xcode của bạn (xcodeproj) nằm trong ~/dev/MyProject, thì bạn có thể có một thư mục MyProject khác có nguồn Object-C. Trong Thư mục ~/dev/MyProject/MyProject chạy git submodule add git@github.com:user/javaproject đến tạo một thư mục ~/dev/MyProject/MyProject/javaproject có nguồn cho dự án Java của bạn ngay bên cạnh nguồn Mục tiêu-C. Sau đó, bạn có thể kéo thư mục đó vào dự án Xcode của mình trong nhóm MyProject có Xcode phản ánh hệ thống tệp của bạn. ${PROJECT_DIR}/MyProject/javaproject/src$source-root.

    • Nếu các nguồn Java nằm trong một nhóm hoặc thư mục trong dự án Xcode của bạn, thì $source-root${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 đó và chọn Hiển thị trong Finder để xem 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, 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 sử dụng khi liệt kê chúng 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 xây dựng).

  4. Nhấp vào dấu + để thêm quy tắc bản dựng.

  5. Đối với tuỳ chọn Process (Tiến trình) của quy tắc mới, hãy chọn "Tệp nguồn Java". Tuỳ chọn Sử dụng phải là "Tập lệnh tuỳ chỉnh:".

  6. Trong hộp văn bản của tập lệnh tuỳ chỉnh, hãy thêm đoạn mã 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ẽ trông giố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 cho khả năng tương thích ngược):

Quy tắc xây dựng Xcode

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

Bước tạo liên kết (giai đoạn tạo "Liên kết tệp nhị phân với thư viện" của Xcode) cần Cờ dành riêng cho J2ObjC, tuỳ thuộc vào cách ứng dụng của bạn sử dụng các lớp Java đã dịch. Để xem danh sách đầy đủ, hãy xem Cài đặt liên kết bắt buộc. Sau đây là một vài ví dụ về những thư viện bổ sung 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.

Gỡ lỗi bản dựng

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

  • Không thể giải quyết Class (Lớp) – Rất có thể là $source-path mà bạn đã sử dụng không chính xác. Tìm tuỳ chọn -sourcepath trong lệnh được 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.

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

  • "_IOSClass_FromClass", được tham chiếu từ: hoặc "_OBJCCLASS$_Java" – Hoặc là Thư viện Đường dẫn tìm kiếm 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 Khác Cờ trình liên kết với -ljre_emul. Bạn cũng có thể cần liên kết các thư viện khác.

  • 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 sự cố, hãy hỏi j2objc-discuss.