2013-02-12 26 views
7

Tôi đang cố mở tệp cấu hình di động (mobileconfig) trong safari để cài đặt nhưng không có tác dụng. tôi sử dụng Scheme URL:Mở tệp .mobileconfig được lưu trong ứng dụng trong safari ios

NSURL *finalURL = [NSURL URLWithString:[NSString stringWithFormat:@"myAppURLScheme://%@",fileName]]; 
BOOL canOpen = [[UIApplication sharedApplication] openURL:finalURL]; 
    if (canOpen) NSLog(@"can open"); 
    else NSLog(@"can't open"); 

log ->can open

và tôi cố gắng để thiết lập tất cả các đường dẫn (các tập tin trong thư mục Documents) đến tập tin thay vì fileName, không có gì. làm cách nào tôi có thể làm điều đó. ?

Edit1: đây application làm như vậy (Safari mở để cài đặt cấu hình)

Edit2: Tôi nghĩ rằng tôi phải tìm kiếm cách để gửi hồ sơ (có) cho Safari, và safari sẽ biết Làm gì với nó đây.

Trả lời

13
  1. Ủy quyền cho một công việc nền

tập tin .h:

UIBackgroundTaskIdentifier bgTask; 

tập tin .m: Trong applicationDidEnterBackground thêm một nhiệm vụ nền mới:

bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{ 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [application endBackgroundTask:self->bgTask]; 
      self->bgTask = UIBackgroundTaskInvalid; 
     }); 
    }]; 
  1. Thêm CocoaHTTPServer vào dự án của bạn

  2. Chạy máy chủ và mở.tập tin mobileconfig:

    RoutingHTTPServer *httpServer = [[RoutingHTTPServer alloc] init]; 
        [httpServer setType:@"_http._tcp."]; 
        [httpServer setPort:12345]; 
        [httpServer setDefaultHeader:@"Content-Type" value:@"application/x-apple-aspen-config"]; 
        [httpServer setDocumentRoot:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]]; 
    
        if([httpServer start:nil]) 
        { 
         [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://localhost:12345/myprofile.mobileconfig"]]; 
        } 
    
+0

Tôi không thể tìm thấy RoutingHTTPServer trong CocoaHTTPServer. Đây có phải là thứ bạn đã tạo không? –

+0

https://github.com/mattstevens/RoutingHTTPServer – malinois

+0

https://github.com/robbiehanson/CocoaHTTPServer – malinois

3

Tệp cấu hình trên thiết bị di động nằm trong hộp cát của ứng dụng của ứng dụng. Safari không có quyền truy cập vào nó. Giá trị trả lại của [UIApplication openURL] chỉ cho biết nếu có một ứng dụng hiểu rằng sơ đồ url url. Có vẻ như tôi đang gửi url đó cho chính mình, giả sử rằng bạn đã thêm myAppURLScheme làm một bộ xử lý uri uri vào tệp info.plist của bạn.

+0

cảm ơn bạn, tôi đã suy nghĩ giống nhau nhưng thấy điều này http://stackoverflow.com/questions/12082184/install-mobileconfig-programmatically (không phải là 100% tương tự) vì vậy tôi hãy thử nó vì tôi không biết làm thế nào để làm. nhưng tôi nghĩ rằng đây sẽ là điều tương tự để mở bất kỳ loại tệp nào khác trong safari từ sandbox. –

+0

Trong trường hợp đó tập tin mobileconfig đến từ một máy chủ đến Safari. Điều đó làm việc, tất nhiên. Trình xử lý url được sử dụng để lấy lại từ Safari cho ứng dụng của bạn sau khi Safari và Cài đặt đã cài đặt cấu hình. – onnoweb

+0

cảm ơn bạn, nhưng ứng dụng của tôi tạo tệp cấu hình và lưu nó trong thư mục Tài liệu (không cần máy chủ) nên vấn đề chính là cách gửi tệp từ hộp cát ứng dụng đến safari (như thao tác 'mở trong'). –

0

Tôi nghĩ bạn có thể sử dụng URI dữ liệu để mã hóa và khởi chạy mobileconfig. (Tôi không có thiết bị IOS đây, vì vậy tôi không thể kiểm tra ngay_ đúng

Bạn có thể sử dụng để mã hóa http://dopiaza.org/tools/datauri/index.php hồ sơ của bạn (đừng quên để thêm loại mime: application/x-apple-Aspen-config)

Sau đó, bạn có thể mở:

[[UIApplication sharedApplication] openURL:dataURLGenerated]; 
+0

cảm ơn bạn, nhưng tôi thấy 2 vấn đề: 1.cách tạo một url valide với dữ liệu đó bởi vì URLWithString: trả về 'KHÔNG', không phải là một url valide? 2.Làm cách nào tôi có thể tạo dữ liệu đó? nhưng tôi nghĩ rằng đây có thể là giải pháp (URI dữ liệu được hỗ trợ trong ios 3.2 trở lên: http://caniuse.com/datauri) –

0

khá không có may mắn hoặc nhưng tôi đăng bài này anyway nếu người khác có thể sử dụng thông tin này, tôi đã cố gắng mở chuỗi qua data: url được hỗ trợ bởi Mobile Safari, nhưng không phải bằng. openURL: - thật đáng buồn.

NSString *urlHeader = @"data:application/x-apple-aspen-config;charset=utf-8,"; 
NSString *mobileConf = @"<?xmlversion=\"1.0\"encoding=\"UTF-8\"standalone=\"yes\"?>" 
    "<!DOCTYPEplistPUBLIC\"-//Apple//DTDPLIST1.0//EN\"\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" 
    "<plistversion=\"1.0\"><dict><key>PayloadUUID</key><string>A0670934-C558-42E1-9E80-9B8E079E9AB2</string><key>PayloadDisplayName</key><string>EnableTethering</string><key>PayloadDescription</key><string>EnablesTethering</string><key>PayloadOrganization</key><string>de.iphone-notes</string><key>PayloadVersion</key><integer>1</integer><key>PayloadIdentifier</key><string>de.iphone-notes.etisalat</string><key>PayloadType</key><string>Configuration</string><key>PayloadContent</key><array><dict><key>PayloadUUID</key><string>C1A41907-0CD9-4DC9-BAF1-A04A73B7E296</string><key>PayloadDisplayName</key><string>AdvancedSettings</string><key>PayloadDescription</key><string>ProvidescustomizationofcarrierAccessPointName.</string><key>PayloadOrganization</key><string>de.sendowski</string><key>PayloadVersion</key><integer>1</integer><key>PayloadIdentifier</key><string>de.iphone-notes.etisalat.apn</string><key>PayloadContent</key><array><dict><key>DefaultsDomainName</key><string>com.apple.managedCarrier</string><key>DefaultsData</key><dict><key>apns</key><array><dict><key>apn</key><string>Etisalat.ae</string><key>username</key><string></string><key>password</key><string></string><key>type-mask</key><integer>-2</integer></dict></array></dict></dict></array><key>PayloadType</key><string>com.apple.apn.managed</string></dict></array></dict></plist>"; 

mobileConf = [mobileConf stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
NSURL *finalURL = [NSURL URLWithString:[urlHeader stringByAppendingString:mobileConf]]; 

BOOL canOpen = [[UIApplication sharedApplication] openURL:finalURL]; 
if (canOpen) NSLog(@"can open"); 
else NSLog(@"can't open"); 

Để thử nghiệm, bạn có thể thêm http:// trước data: thì ít nhất nó sẽ mở trong Safari và bạn có thể xóa tiền tố để dùng thử. Có lẽ một số tiêm javascript để loại bỏ các tiền tố sẽ làm việc; Tôi không biết.

+0

cảm ơn bạn, nhưng điều này không hoạt động tôi có thông điệp cảnh báo này khi safari mở : "safari không thể mở trang vì nó là tệp cục bộ." ý của bạn là gì với việc tiêm javascript? beacause 1) tôi muốn bán ứng dụng của tôi trong appstore để không hack. 2) nó phải ngoại tuyến. –

+0

Tôi thậm chí không biết liệu '.mobileconfig' có hợp lệ hay không, vì vậy có thể là nó không hoạt động. Tôi có nghĩa là một cái gì đó như 'http: // javascript: window.location = data_string_here' mà rõ ràng là không làm việc –

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