2012-04-18 25 views
9

Tôi đã đặt câu hỏi here nhưng câu trả lời hướng dẫn tôi mở một chủ đề mới. Một thời gian ngắn, tôi muốn khởi chạy một ứng dụng miễn phí trên Appstore từ ứng dụng của tôi nhưng ứng dụng tôi muốn khởi chạy không có URL Scheme. Các ý kiến ​​về câu hỏi khác của tôi nói sử dụng một số API đặc biệt như SBSLaunchApplicationWithIdentifier hoặc các lớp như UIDocumentInteractionController làm cho nó có thể. Bất cứ ai có thể vui lòng giúp tôi làm thế nào để khởi động một ứng dụng từ appication của tôi. Cảm ơn trướcAPI đặc biệt để khởi chạy ứng dụng từ ứng dụng của tôi

Trả lời

15

Hãy để tôi nói rằng phương pháp này chỉ là jailbreak! Nó sử dụng API riêng tư mà Apple có thể ngừng hỗ trợ bất kỳ lúc nào trong một phiên bản trong tương lai!

Chúng ta hãy để nó, phương pháp này sử dụng [UIApplication launchApplicationWithIdentifier:suspended:] phương pháp riêng:

[[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.apple.Preferences" suspended:NO]; 

Từ những gì tôi đã thử nghiệm gọi phương pháp này từ một ứng dụng không chạy bằng root là vô ích, rõ ràng là bàn đạp (hoặc LaunchServices) chỉ cho phép các ứng dụng gốc khởi chạy các ứng dụng khác bằng phương pháp này.

Vì vậy, trước tiên bạn cần phải bẻ khóa iPhone của mình, sau đó bạn cần chạy ứng dụng của mình dưới dạng root.

Để ứng dụng của bạn chạy dưới dạng root, bạn cần đặt ứng dụng đó vào /Applications/YourApp.app thay vì thông thường/Người dùng/Ứng dụng/UUID /YourApp.app.

Bạn có thể cài đặt OpenSSH bằng Cydia và sử dụng SSH để truy cập trình bao của điện thoại.

Sau đó, sau khi ứng dụng của bạn ở đúng nơi bạn cần phải thiết lập quyền, ví dụ:

enter image description here

Tôi sẽ sử dụng những cái tương tự như Cydia:

chown -R root:wheel /Applications/YourApp.app 

Tiếp theo, một mẹo nhỏ. Nhị phân sẽ cần setuid bit:

chmod 4755 /Applications/YourApp.app/YourApp 

Và đối với những bước cuối cùng, SpringBoard không ứng dụng mở với các bit setuid, nhưng nó sẽ mở ra một kịch bản (có thể mở ứng dụng khác)! Chỉ cần thay đổi tên của nhị phân để cái gì đó như YourApp_:

mv /Applications/YourApp.app/YourApp /Applications/YourApp.app/YourApp_ 

Và tạo một file mới có tên yourapp trong thư mục ứng dụng của bạn với kịch bản sau đây:

#!/bin/bash 
CrrDir=$(dirname "$0") 
exec "${CrrDir}"/YourApp_ 

Bây giờ, chỉ cần respring (có một ứng dụng cho điều đó trong Cydia) và bạn đã sẵn sàng.

Xin lỗi nếu điều này có vẻ khó khăn, nó không phải là, tôi không nhớ nơi tôi đã học nó, nhưng nó đã được một thời gian dài trước đây. Phương pháp này hoạt động tốt trong tất cả các phiên bản iOS và tôi vừa thử nghiệm nó với iOS 5.1.

Một lần nữa, ỨNG DỤNG CỦA BẠN S NOT KHÔNG ĐƯỢC PHÊ DUYỆT THEO APPLE NẾU BẠN THỰC HIỆN.

+0

Cảm ơn bạn trước. Tôi đọc nó và tôi sẽ nghiên cứu về nó ngay bây giờ.Không có vấn đề nếu nó là khó khăn :) – ilhnctn

+0

Np, tôi hy vọng câu trả lời này sẽ giúp nhiều người hơn, tôi đã nhìn thấy câu hỏi này nhiều lần trong SO. – fbernardo

+0

Câu hỏi thứ hai, tôi có phải jailbreak thiết bị của tôi để làm những việc này không (như .. cài đặt OpenSSH bằng Cydia và sử dụng SSH để truy cập vào vỏ điện thoại của bạn) – ilhnctn

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