2015-10-08 17 views
7

Vấn đề của tôi là tôi không thể tìm hiểu xem một URL nhất định có thể được mở từ tiện ích iOS hay không. Phương thức canOpenURL: không khả dụng trên tiện ích của ngày hôm nay vì không có lớp học UIApplication.Kiểm tra xem URL có thể được mở từ tiện ích con ngày hôm nay của iOS hay không

Ngoài ra, phương pháp openURL: của NSExtensionContext trả về CÓ cho thành công "boolean", ngay cả với URL không hợp lệ.

Mã bên dưới nhập điều kiện khác (thành công BOOL luôn là CÓ) nhưng trong cùng thời gian trình mô phỏng hiển thị lỗi bật lên, như bạn có thể thấy trong hình ảnh đính kèm.

NSURL* invalidURL = [NSURL URLWithString:@"fake://blablabla"]; 
[self.extensionContext openURL:invalidURL completionHandler:^(BOOL success) { 
    if (success == NO) { 
     DDLogWarn(@"Can't open URL: %@", invalidURL); 
    } 
    else{ 
     DDLogInfo(@"Successfully opened URL: %@",invalidURL); 
    } 
}]; 

enter image description here

+0

bạn đã thử này trên một thiết bị thật không? Các behviour có thể khác nhau. –

Trả lời

1

Đó là một lỗi được biết. Tôi đã đệ trình vấn đề này với Apple vào năm ngoái (rdar: // 18107612) khi iOS 8.0b5 là hiện tại, và nó vẫn là một vấn đề mở.

Nộp lỗi của riêng bạn với Apple theo số http://bugreport.apple.com và hy vọng điều tốt nhất.

+0

Cảm ơn bạn đã chỉ ra điều đó. Có cách giải quyết khả thi nào không? Điều đó sẽ được đánh giá cao. –

+0

Không phải là tốt nhất. Tốt nhất tôi có thể nghĩ là để có ứng dụng chính của bạn kiểm tra trên URL và sau đó lưu thông tin trong mặc định của người dùng để chỉ ra cho dù nó hoạt động. Phần mở rộng có thể đọc được. Tuy nhiên, thông tin có thể không tồn tại nếu người dùng thêm hoặc xóa ứng dụng. –

0

Bạn có thể đến được chia sẻ UIApplication dụ bằng cách sử dụng performSelector:, một cái gì đó giống như

UIApplication *sharedApplication = [[UIApplication class] performSelector:NSSelectorFromString(@"sharedApplication")];

+0

Tôi nghĩ rằng đây không phải là API công khai, vì vậy Apple sẽ từ chối bất kỳ ứng dụng nào sử dụng dòng mã này, phải không? – andreacipriani

+0

Đó là sự thật, nếu bạn làm xáo trộn chữ ký phương thức bạn có thể vượt qua được mặc dù –

+0

làm xáo trộn nó và thêm kiểm tra 'NSDate' để đảm bảo cuộc gọi chỉ được thực hiện sau ngày xem xét ứng dụng dự kiến ​​kết thúc .. Nhưng nghiêm túc, Tôi không nghĩ bạn nên làm điều này. – Mazyod

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