2014-04-08 22 views
6

Ứng dụng iOS của tôi cần đặc quyền truy cập ảnh để chạy đúng cách.Có cách nào để biết ứng dụng iOS của tôi đã bị thay đổi bởi cài đặt bảo mật không?

Tôi đã thử nghiệm cách ứng dụng của tôi phản hồi những thay đổi trong cài đặt bảo mật khi tôi phát hiện ra điều sau: mỗi lần tôi chuyển đến ứng dụng Cài đặt và thay đổi cài đặt bảo mật cho ứng dụng của mình (bật hoặc tắt) ứng dụng bị giết mà không có bất kỳ cảnh báo nào.

tôi tìm thấy những bản ghi trong giao diện điều khiển thiết bị của tôi:

Apr 8 15:01:50 iPad Preferences[5924] <Warning>: ########### Quitting application (xxx) in response to privacy settings change. 
Apr 8 15:01:50 iPad com.apple.launchd[1] (UIKitApplication:xxx[0xc7cb][6039]) <Notice>: (UIKitApplication:com.edupad.itoochdev[0xc7cb]) Exited: Killed: 9 
Apr 8 15:01:50 iPad backboardd[30] <Warning>: Application 'UIKitApplication:xxx[0xc7cb]' exited abnormally with signal 9: Killed: 9 

Và mặc dù tôi thực hiện applicationWillTerminate: trong đại biểu ứng dụng của tôi, nó dường như không được gọi trước khi ứng dụng được giết.

Tôi không thể tìm thấy bất kỳ tài liệu liên quan nào về những gì tôi nên triển khai để nhận thông báo trước khi ứng dụng của tôi bị giết. Bất kỳ ý tưởng nếu tôi có thể giải quyết điều này?

PS 1: tôi biết tôi có thể triển khai applicationDidEnterBackground: nhưng tôi muốn cung cấp UX khác nhau trong trường hợp (A) người dùng nhanh chóng chuyển sang ứng dụng Cài đặt để thay đổi cài đặt bảo mật hoặc (B) mà người dùng muốn hãy tiếp tục và sẽ không quay lại ứng dụng trước một thời gian

PS 2: nếu bạn đang thử nghiệm loại điều này, đừng làm điều đó với ứng dụng của bạn đang được khởi chạy qua Xcode hoặc bạn sẽ gặp sự cố với sigkill.

+0

Bạn luôn phải mong đợi rằng ứng dụng của bạn có thể bị giết sau khi chuyển sang nền. Ngay cả khi người dùng nhanh chóng chuyển sang cài đặt bảo mật, họ có thể nhớ một số thứ khác, chuyển đến một ứng dụng khác, v.v. Vì vậy, khả năng duy nhất bạn có là có thể kiểm tra bao nhiêu thời gian đã được chi tiêu giữa nhập nền và tiền cảnh. – gnasher729

Trả lời

0

Thông thường trong trường hợp bạn muốn lưu trạng thái hoặc xóa mã trước khi ứng dụng của bạn bị giết, bạn sẽ cần xác định khối beginBackgroundTaskWithExpirationHandler.

Bạn có thể xem tài liệu WWDC 2012 của Apple để nói về những gì xảy ra khi cài đặt bảo mật được thay đổi iOS6 trở đi. Tóm lại, nó nói rằng beginBackgroundTaskWithExpirationHandler được gọi trước khi một SIGKILL được gửi để bạn có thể xử lý việc dọn sạch mã ở đó.

Có một cuộc thảo luận khác về Stack Overflow dọc theo cùng một dòng. Sẽ rất hữu ích nếu ai đó có thể tìm thấy nó và liên kết nó ở đây.

+0

Điều này dường như không còn đúng trong iOS 10 –

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