2011-01-12 35 views
10

Nếu SDK iOS không có chức năng này, thì nếu tôi có trang web cơ bản (tĩnh) và một nơi nào đó trên trang web đó, tôi sẽ đặt một đoạn dữ liệu chỉ định phiên bản ứng dụng mới nhất của tôi theo cách thủ công trong cửa hàng ứng dụng mỗi khi tôi phát hành bản cập nhật? Tôi làm cách nào để ứng dụng truy vấn trang web cho dữ liệu phiên bản đó và kiểm tra nó trên phiên bản đang chạy trên thiết bị iOS?Cách đơn giản nhất để kiểm tra phiên bản ứng dụng hiện tại của bạn so với phiên bản mới nhất trong cửa hàng ứng dụng là gì?

+0

Tôi tự hỏi tại sao Apple không cung cấp cơ chế để kiểm tra thông tin đó thông qua khung công tác iTunes hay gì đó. –

Trả lời

12

Bạn đang đi đúng hướng. Bạn cần phải thực hiện một yêu cầu HTTP đến trang web phiên bản tĩnh của bạn. Để thực hiện điều này, bạn có thể sử dụng đối tượng NSURLConnection. Vì vậy, một cái gì đó như:

NSURL * url = [NSURL URLWithString:@"http://yourweb.com/version.txt"]; 
NSURLRequest * request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:60]; 
_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

Sau đó, trong việc thực hiện uỷ quyền của bạn:

(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSHTTPURLResponse*)response 
{ 
    if(response.statusCode != 200) 
     // you got an error 
} 

- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error 
{ 
    // again with the errors ... 
} 

// you got some data ... append it to your chunk 
// in your case all the data should come back in one callback 
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data 
{ 
    [mData appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    // your request finished ... check the version here 
} 

Vì vậy, trong bạn connectionDidFinishLoading bạn có một cái nhìn tại mData mà bạn đã thu thập được. Phân tích cú pháp số phiên bản và so sánh số phiên bản với số phiên bản gói của bạn:

[self infoValueForKey:@"CFBundleVersion"]; 
+0

rất đơn giản, sẽ hoạt động tốt, cảm ơn bạn! – BeachRunnerFred

+0

@BeachRunnerJoe Không có vấn đề gì. :) – RedBlueThing

+0

Vấn đề là CFBundleVersion là sai lầm dân cư với số lượng xây dựng, không phải là phiên bản. Dùng thử trong Xcode: Đặt số bản dựng khác với phiên bản ứng dụng của bạn. Cuộc gọi ở trên sẽ trả về số bản dựng, vì Xcode điền vào số không chính xác. Nó đặt số bản dựng vào phiên bản gói. Thay vào đó, sử dụng – Oscar

1

Tôi đã sử dụng cùng một giải pháp @RedBlueThing được đề xuất trong nhiều ứng dụng của tôi. Tôi đã chia tỷ lệ cho dịch vụ mà các nhà phát triển ứng dụng khác có thể sử dụng tại CleverStork - một Người quản lý cập nhật cho Ứng dụng. Hy vọng các bạn thích nó :)

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