Có thể tải ứng dụng có chứa NSBundle
từ bên trong tiện ích mở rộng ứng dụng không? Tôi muốn nhận tên hiển thị của ứng dụng chính chứ không phải tên hiển thị của tiện ích mở rộng.Lấy gói ứng dụng chính từ trong phần mở rộng
9
A
Trả lời
18
Phương thức +mainBundle
trả về gói chứa "tệp thi hành ứng dụng hiện tại", là thư mục con của ứng dụng của bạn khi được gọi từ trong tiện ích mở rộng.
Giải pháp này liên quan đến việc bóc hai cấp thư mục khỏi URL của gói, khi kết thúc bằng "appex".
Objective-C
NSBundle *bundle = [NSBundle mainBundle];
if ([[bundle.bundleURL pathExtension] isEqualToString:@"appex"]) {
// Peel off two directory levels - MY_APP.app/PlugIns/MY_APP_EXTENSION.appex
bundle = [NSBundle bundleWithURL:[[bundle.bundleURL URLByDeletingLastPathComponent] URLByDeletingLastPathComponent]];
}
NSString *appDisplayName = [bundle objectForInfoDictionaryKey:@"CFBundleDisplayName"];
Swift 2,2
var bundle = NSBundle.mainBundle()
if bundle.bundleURL.pathExtension == "appex" {
// Peel off two directory levels - MY_APP.app/PlugIns/MY_APP_EXTENSION.appex
bundle = NSBundle(URL: bundle.bundleURL.URLByDeletingLastPathComponent!.URLByDeletingLastPathComponent!)!
}
let appDisplayName = bundle.objectForInfoDictionaryKey("CFBundleDisplayName")
Swift 3
var bundle = Bundle.main
if bundle.bundleURL.pathExtension == "appex" {
// Peel off two directory levels - MY_APP.app/PlugIns/MY_APP_EXTENSION.appex
let url = bundle.bundleURL.deletingLastPathComponent().deletingLastPathComponent()
if let otherBundle = Bundle(url: url) {
bundle = otherBundle
}
}
let appDisplayName = bundle.object(forInfoDictionaryKey: "CFBundleDisplayName")
này sẽ phá vỡ nếu Pathé xtension hoặc cấu trúc thư mục cho một phần mở rộng iOS bao giờ thay đổi.
Các vấn đề liên quan
- 1. Cách lấy phần mở rộng loại tệp từ byte [] (Blob)
- 2. Gọi phần mở rộng ứng dụng iOS theo chương trình
- 3. Lấy phần mở rộng tập tin (basename?)
- 4. Có cách nào để lấy từ trong menu ngữ cảnh trong phần mở rộng firefox không?
- 5. iPhone ứng dụng từ chối cho sử dụng (phần mở rộng Unicode) ICU
- 6. Cách lấy đường dẫn chính xác của notepad.exe để liên kết phần mở rộng tệp
- 7. Mở rộng ứng dụng Meteor trên Heroku
- 8. Lấy chi tiết chứng chỉ từ một gói ứng dụng
- 9. Lấy biểu tượng cho một phần mở rộng cho
- 10. SPLFileInfo: lấy tên tệp không có phần mở rộng
- 11. Mở rộng ColdFusion với các ứng dụng UDF rộng
- 12. Cách lấy phần mở rộng của tệp bằng PHP?
- 13. lấy phần mở rộng của tệp (chỉnh sửa)
- 14. Gói .exe vào .vsix và gọi từ phần mở rộng Visual Studio
- 15. Variadic Templates mở rộng gói
- 16. Gói sai mở rộng trong mẫu variadic
- 17. Khởi chạy ứng dụng từ gói ứng dụng
- 18. Mở rộng gói người dùng của mean.io
- 19. Cách sử dụng phần mở rộng .jsf trong URL?
- 20. trong phần mở rộng Python C
- 21. Lấy tên tệp và phần mở rộng từ đường dẫn tuyệt đối
- 22. Thiết lập rộng ứng dụng Listeners chính
- 23. Sử dụng Rx (Phần mở rộng phản ứng) để xem một mục cụ thể trong ObservableCollection
- 24. sử dụng jquery trong phần mở rộng chrome
- 25. Makefile cho chương trình C sử dụng các phần mở rộng nhiều phần
- 26. Tạo mã từ một phần mở rộng Visual Studio
- 27. Thêm phần mở rộng .txt trong JFileChooser
- 28. menu Context trong phần mở rộng Chrome
- 29. pathForResource? mà không sử dụng phần mở rộng (Iphone)
- 30. Cụm từ thông dụng cho phần mở rộng tập tin trong Java
Cảm ơn vì điều này! Bạn đã có thể tải ứng dụng AppStore theo cách này chưa? – ewindsor
Có, không có API riêng nào được sử dụng tại đây. Chúng tôi đã sử dụng tiện ích này trong tiện ích watchOS 1 của chúng tôi để tải mô hình đối tượng được quản lý cho 'UIManagedDocument' từ gói ứng dụng iOS chính. – phatblat
Ah tuyệt vời. Cảm ơn vì sự thấu hiểu. – ewindsor