tôi đã được tập trung vào làm thế nào để mã cổ phiếu tốt nhất giữa Android và iOS những quá khứ vài tuần và đây là gợi ý của tôi dựa trên kinh nghiệm của tôi:
a) Nói chung, bạn có thể chia sẻ bất cứ điều gì giữa các nền tảng mà không phải là nền tảng cụ thể.
Tôi có xu hướng sử dụng người trình bày hoặc người hòa giải giữ tham chiếu đến chế độ xem được xác định bởi giao diện. Ví dụ: nếu tôi có Chế độ xem đăng nhập, tôi sẽ có UIViewController trên iOS và Hoạt động trên Android của tôi đều triển khai giao diện ILoginView. Giao diện này sẽ có định nghĩa sau đây:
- Getters cho Username và Password
- Một sự kiện được gọi là LoginSubmitted
- Hai phương pháp ShowLoginFailed và GoNextScreen
Người dẫn chương trình/Hòa giải viên sẽ chịu trách nhiệm cho việc nghe thông tin đăng nhập được gửi, nhận tên người dùng/mật khẩu và chuyển những thứ đó cho một cuộc gọi hoặc lệnh dịch vụ. Bất cứ khi nào người hòa giải nhận được kết quả của lệnh/dịch vụ, nó sẽ chịu trách nhiệm gọi ShowLoginFailed hoặc GoNextScreen.
Tôi cũng đã sử dụng giao diện để xác định Trình quản lý SQLite (https://github.com/praeclarum/sqlite-net/tree/master/src) hoặc một đại biểu chịu trách nhiệm thực hiện cuộc gọi dịch vụ API web thực tế. Tôi đã tìm thấy tôi đã phải làm điều này bởi vì có một số nền tảng biên dịch cụ thể mà cần phải xảy ra cho người quản lý SQLite và RestSharp.
Câu chuyện dài ngắn, giao diện là bạn của bạn đặc biệt là khi bạn kết hợp chúng với một số loại hệ thống Dependency Injection.
b) Nếu bạn muốn người dùng được nhắc bằng cảnh báo khi thiết bị của họ ở chế độ ngủ hoặc khi họ đang ở trong ứng dụng khác, tôi sẽ sử dụng AlarmManager cho Android và LocalNotification cho iOS.
c) Bạn có thể sử dụng PCL với Xamarin.Android và Xamarin.iOS. Vấn đề là PCL chưa được hỗ trợ 100%. Tuy nhiên, có một số tinh chỉnh bạn có thể làm cho môi trường dev của bạn mà hy vọng sẽ đưa bạn đến nơi bạn muốn:
Chuyển sang Beta hoặc kênh Alpha trong Xamarin Studio: "Xamarin Studio" -> "Check for Updates "-> Thay đổi kênh trong hộp kết hợp ở phía trên bên trái của hộp thoại bật lên -> Chọn" Khởi động lại và cài đặt bản cập nhật ". Điều này sẽ cho phép bạn có cả dự án Android và iOS có thể liên kết với cùng một PCL trong cùng một giải pháp.
Sau khi cập nhật XS, XS gần gũi và làm theo hướng dẫn trong bài viết này để sửa đổi Mono bạn cài đặt để PCLs đúng biên dịch: MonoDevelop: is it possible to switch PCL's compiler?
Để nhận được mã gợi ý để chơi đẹp hơn bên trong dự án PCL của bạn, bạn sẽ cần để lấy mscorlib.dll từ cài đặt Mono của bạn và đặt nó vào một thư mục DLL trong thư mục dự án của bạn và thêm một tham chiếu đến nó trong dự án PCL của bạn. Bạn có thể tìm dll ở đây: /Library/Frameworks/Mono.framework/Versions/3.0.10/lib/mono/4.0
Một khi bạn đã thực hiện tất cả điều đó, bạn phải ở trong tình trạng tốt nhận được PCL của bạn hoạt động. Tôi đã thấy rằng điều này đáng giá hơn trong công việc mà tôi có thể tạo ra một dự án Test Unit trong XS liên kết nó với PCL và chạy các kiểm thử từ bên trong IDE. Ngoài ra, tôi có thể sử dụng libs như Moq để giả lập quan điểm của tôi và làm các bài kiểm tra tích hợp.
Xamarin hứa hẹn rằng hỗ trợ PCL đầy đủ sẽ đến "sớm" và chúng tôi sẽ không phải lo lắng về những hacks này.
Nhìn vào Xamarin - Tôi thích ý tưởng của bạn về việc sử dụng các giao diện. Rất hữu ích. – YnotDraw
Thông tin tuyệt vời. Cảm ơn vì đăng. – Stonetip
Nếu bạn muốn viết một ứng dụng chạy trên tất cả các nền tảng thì zamarin là lựa chọn duy nhất. iOS, Android, Firefox OS – user3491862