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
- 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.
- Nhấp vào thẻ Build Settings (Cài đặt bản dựng).
- 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: - Nhấp vào dấu + rồi chọn Thêm chế độ cài đặt do người dùng xác định.
- Đặ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ụcj2objc/dist
nếu bạn biên dịch từ nguồn và thư mục gốc làj2objc
. - 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
.
- Đường dẫn tìm kiếm khung thêm
- 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:
Thêm quy tắc tạo J2ObjC
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ụcMyProject
khác có nguồn Object-C. Trong Thư mục~/dev/MyProject/MyProject
chạygit 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ómMyProject
có Xcode phản ánh hệ thống tệp của bạn.${PROJECT_DIR}/MyProject/javaproject/src
là$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
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 đó 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.
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.
Nhấp vào thẻ Build Rules (Quy tắc xây dựng).
Nhấp vào dấu + để thêm quy tắc bản dựng.
Đố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:".
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};
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
.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):
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ạyls
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.