2015-09-18 14 views
7

Tôi đã tạo một Ứng dụng WatchKit với Mẫu XCode mặc định. Tôi đã thêm một nhóm ứng dụng được hưởng Mục tiêu iOS, cho Mục tiêu ứng dụng của Watchkit và Mục tiêu mở rộng ứng dụng Watchkit. (Đây là tên nhóm ứng dụng: group.com.lombax.fiveminutes) Sau đó, tôi đã cố gắng để truy cập vào URL thư mục chia sẻ với cả iOS App và mở rộng WatchKit:containerURLForSecurityApplicationGroupIdentifier: cung cấp các kết quả khác nhau trên iPhone và Watch simulator

Extension:

@implementation ExtensionDelegate 

- (void)applicationDidFinishLaunching { 
    // Perform any final initialization of your application. 
    NSURL *test = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.lombax.fiveminutes"]; 
} 

iOS App:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 

    NSURL *test = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.lombax.fiveminutes"]; 
// ... 
} 

Tuy nhiên, test NSURL là khác nhau:

Trên iOS:

tệp: /// Người dùng/Lombardo/Thư viện/Nhà phát triển/CoreSimulator/Thiết bị/38B983DB-342F-4A47-8C26-5D2C92CDB666/data/Containers/Shared/AppGroup/8DEE182E-AFE6-47DD-BA2B-6B0520158A8B/

trên Watch:

file: /// Users/Lombardo/Library/Developer/CoreSimulator/Thiết bị/BF52D613-25FF-4092-A5B2-9C3F1B616160/data/Container/Shared/AppGroup/CECB5EFC-7FBD-4C84-A878-1314CB7CF211/

Và vì lý do này, tôi không thể chia sẻ dữ liệu giữa Ứng dụng iOS và Tiện ích mở rộng WatchKit.

Tôi thử dùng thiết bị thực vì tôi không có WatchOS 2.0 trên Apple Watch. Bạn có lời khuyên nào không? Cảm ơn

CẬP NHẬT tôi đã làm một số xét nghiệm khác:

  • cài đặt watchos 2, vấn đề này vẫn còn tồn tại trên thiết bị thực.

Đây là cửa hàng url cho iPhone của tôi:

NSURL * @ "file: /// private/var/mobile/Container/Shared/AppGroup/3D05D159-94D6-409C-9A38 -90E0830D0C3F/FiveMinutes.sqlite "

Và đây là cửa hàng url cho Xem tôi:

NSURL * @" file: /// privat e/var/mobile/Container/Shared/AppGroup/F1E89377-F456-4FC2-BAAC-3DD705EF381A/FiveMinutes.sqlite"

Hai ứng dụng đọc và viết để từ hai .sqlite file khác nhau.

  • Trên trình mô phỏng, nếu tôi mã hóa một trong các URL, cả trình mô phỏng iOS và Trình mô phỏng đồng hồ có thể đọc cùng một tệp .sqlite và chia sẻ nội dung. Tuy nhiên, điều này không thể thực hiện trên các thiết bị thực kể từ khi mở rộng Xem không thể ghi vào con đường iOS:

URL: file: /// private/var/mobile/Container/Shared/AppGroup/3D05D159-94D6 -409C-9A38-90E0830D0C3F/NămMinutes.sqlite tùy chọn: (null) ... trả về lỗi Tên miền lỗi = NSCocoaErrorDomain Code = 512 "Không thể lưu tệp." UserInfo = {reason = Không thể tạo tập tin; code = 2} với từ điển userInfo { reason = "Không thể tạo tệp; mã = ​​2"; }

+0

Nhưng bạn đã thử thực sự đặt tệp và truy cập chúng? Thiên Chúa biết làm thế nào mô phỏng hoạt động và những gì các thư mục hiện nó sử dụng. Phát biểu của watchOS 2.0. Đó là những ứng dụng gốc ngay bây giờ. Bạn không nên thêm quyền lợi cho ứng dụng xem? – Yaroslav

+0

Có, tôi đã cố gắng viết tệp và chúng được đặt ở các vị trí khác nhau, iOS không thể truy cập vào tệp xem và đồng hồ không thể truy cập vào tệp iOS. Tôi đã thêm các quyền lợi vào ứng dụng iOS, ứng dụng đồng hồ và tiện ích mở rộng đồng hồ. Quyền lợi dường như được bổ sung tốt, vì nếu tôi thay đổi chuỗi quyền lợi thành một thứ khác thì NSURL được trả về sẽ trở thành không – LombaX

Trả lời

12

Ok, tôi nghĩ tôi đã tìm thấy câu trả lời của mình. Tôi nhớ rằng với quá trình chuyển đổi sang Watch OS 2, mã mở rộng hiện được thực hiện trực tiếp trên Apple Watch và không còn trên iPhone được ghép nối nữa. Vì vậy, có vẻ như rõ ràng rằng hai thiết bị không chia sẻ cùng một bộ nhớ.

Điều đầu tiên tôi làm là tạo một dự án mới, bắt đầu từ Dự án iOS cơ sở và sau đó thêm một Hệ điều hành đồng hồ 1 (phiên bản cũ) Mục tiêu ứng dụng. Trong trường hợp này, các thư mục giống hệt nhau và họ có thể giao tiếp:

Xem Đường dẫn: file: /// Users/Lombardo/Library/Developer/CoreSimulator/Thiết bị/BF52D613-25FF-4092-A5B2-9C3F1B616160/dữ liệu/Vùng chứa/Shared/AppGroup/30B39103-CEEB-4C64-9531-FB27DC40180D/

iOS Đường dẫn tệp: /// Người dùng/LombardoD613-25FF-4092-A5B2-9C3F1B616160/data/Containers/Shared/AppGroup/30B39103-CEEB-4C64-9531-FB27DC40180D/

Sau đó, tôi đã làm điều đầu tiên mọi lập trình viên nên làm: đọc tài liệu. Trong TRANG ĐẦU của hướng dẫn chuyển watchos 2 có câu này:

phần mở rộng của bạn bây giờ lưu trữ tập tin và dữ liệu trên Apple Watch. Mọi dữ liệu không thuộc gói ứng dụng Đồng hồ hoặc gói mở rộng WatchKit của bạn phải được tìm nạp từ mạng hoặc từ ứng dụng iOS đồng hành chạy trên iPhone của người dùng. Bạn không thể dựa vào vùng chứa nhóm được chia sẻ để trao đổi tệp với ứng dụng iOS của mình. Tìm nạp tệp liên quan đến việc chuyển chúng không dây sang Apple Watch.

Các vấn đề liên quan