2014-04-24 2 views
0

정적 (사용자가 편집 할 수 없음) coredata 파일이있는 iOS 7 앱이 있습니다. 때때로이 파일을 업데이트해야합니다. 요리 책의 요리법이나 주소록의 전화 번호를 업데이트하는 것과 같습니다.iOS가 원격 소스의 핵심 데이터 파일을 업데이트합니다.

응용 프로그램 자체 (이진 파일)는 변경되지 않습니다.

나는 이런 식으로 한 적이 없습니다. 나는 구체적인 해결책보다는 학습을위한 출발점 (가이드 또는 구글 검색 용어)을 찾고있다.

  1. 어떤 프레임 워크를 사용해야합니까?
  2. 내 웹 서버가 필요합니까?
  3. 앱이 올바른 데이터 파일을 수신하도록하려면 어떻게해야합니까?
  4. 마찬가지로 내 앱에서만 데이터를 요청하도록 할 수 있습니까?
  5. 보안을 어떻게 처리해야합니까? 업데이트를 보내는 것이 본인임을 어떻게 알 수 있습니까?

아마 어딘가에서 데이터를 다운로드하라는 알림을 앱에 보내야합니까? 데이터를 다운로드 할 위치에서 앱의 서버 주소를 하드 코드해야합니까?

답변

2

나는 이것을 위해 간단한 웹 사이트를 사용하고 있습니다. 웹 사이트에 버전 번호 (또는 날짜)가 포함 된 텍스트 파일이 있습니다. 내 코드는 단순히 파일을 다운로드하고 데이터베이스의 버전 필드를 사용하여 버전 또는 날짜를 확인합니다. 최신 버전 인 경우 다운로드 버튼을 활성화합니다.

다운로드 단추는 zip 파일을 다운로드하고 (zip 일 필요는 없음) 추출한 다음 기존 코어 데이터 파일을 새 onen으로 바꿉니다. 지금까지 (2012 년 이후) 아무런 문제없이 일해 왔습니다.

핵심 데이터베이스의 모든 데이터를 하나씩 삭제하고 원격 소스를 사용하여 데이터를 업데이트하는 것이 좋지만 핵심 데이터베이스의 sqlite 파일과 관련 파일을 간단히 대체하는 방법을 사용하고 있습니다. 코드 스 니펫은 다음과 같습니다. -

//removing the core data files 

NSString *finalPath = [NSHomeDirectory() 
        stringByAppendingPathComponent:@"Documents/NTTimeTable.sqlite"]; 
[[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil]; 
finalPath = [NSHomeDirectory() 
       stringByAppendingPathComponent:@"Documents/NTTimeTable.momd/NTTimeTable.mom"]; 
[[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil]; 
finalPath = [NSHomeDirectory() 
       stringByAppendingPathComponent:@"Documents/NTTimeTable.momd/NTTimeTable.omo"]; 
[[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil]; 
finalPath = [NSHomeDirectory() 
       stringByAppendingPathComponent:@"Documents/NTTimeTable.momd/VersionInfo.plist"]; 
[[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil]; 


// Unzipping downloaded file 
finalPath = [NSHomeDirectory() 
      stringByAppendingPathComponent:@"Documents"]; 
[SSZipArchive unzipFileAtPath:tempFilePath toDestination:finalPath]; 
[[NSFileManager defaultManager] removeItemAtPath:tempFilePath error:nil];  

자세한 정보가 필요한 경우 알려주십시오. 원래 위치에 있었을 때 대체 할 수있는 권한이 없기 때문에 핵심 데이터베이스 파일을 Documents 디렉토리로 옮겼습니다. 제가 위에서 보여 주었다으로

Q/A

  1. 은, 난 그냥 웹 서버를 사용하여 내 웹 사이트에서 업데이트 파일을 떠날거야.

  2. 나는 당신의 웹 서버를 가지고 있다고 생각합니다. 인터넷에서 값싼 것을 얻을 수 있습니다. 무료 파일을 사용할 수 있지만 속도, 대역폭, 가용성 등을 고려해야합니다.

  3. 파일이 손상되지 않았는지 확인하기 위해 체크섬을 사용할 수 있습니다. 파일이 올바른지 확인하려면 파일 크기, 내용 등을 읽는 것과 같은 검사를 할 수 있습니다. 제 경우에는 파일 URL을 하드 코드 했으므로 아무 것도하지 않습니다. 데이터가 얼마나 민감한 지에 따라 다릅니다. 내 것은 공공의 물건과 꽤 흡사했습니다.

  4. 앱에서만 데이터를 요청할 수 있도록 간단한 인증을 사용할 수 있습니다. 어쩌면 사용자 이름 및/또는 암호/해시로 게시물 요청을 만들고, 웹 서버에서 확인을 받도록 할 수도 있습니다.나는 싸구려 웹 호스팅 제공 업체의 대부분이 PHP를 지원하므로 서버에 작은 PHP 파일을 사용합니다. 웹 서버의 PHP 파일에서 사용자 이름과 암호/해시를 하드 코딩합니다. 정말로 진지한 경우 비대칭 암호화와 같은 인증 메커니즘을 살펴 보는 것이 좋습니다.

  5. 이것은 어려운 부분입니다. 앱에서 다운로드 URL을 하드 코딩해도 사람들은 여전히 ​​DNS를 변경하거나 모든 일을 수행하여 가짜 웹 서버를 만들어 파일/데이터를 보낼 수 있습니다. 하루가 끝나면 100 % 안전하지는 않지만 침입하기가 더 어려워 질 것입니다.

+0

http://themainthread.com/blog/2014/03/replacing-a-core-data-store.html –

관련 문제