사운드, 이미지, 텍스트 파일을 최초배포하고, 변경된 파일을 다시 배포할 경우 덮어쓰기(overwrite)가 되지않습니다.(10 시애틀. 2016년 3월) 해당 현상은 안드로이드와 iOS 모두 해당됩니다.

이유는 배포 대상파일이 존재하는 경우(FileExist) 배포를 진행하지 않도록 구현(System.StartUpCopy.pas에 구현)되어 있기 때문입니다.

 

해결 방법은 3가지 정도로 생각해볼 수 있습니다.

1, System.StartUpCopy.pas를 수정하는 방법

2, 업데이트할 파일을 새로운 이름으로 배포하고, 앱 시작시 기존 파일로 덮어쓰는 방법

3, 파일을 앱과 함께 최초 배포 후, 파일 변경이 필요할 경우 인터넷 등을 통해 자동 업데이트 하는 방법

 

1, System.StartUpCopy.pas를 수정하는 방법

http://qc.embarcadero.com/wc/qcmain.aspx?d=125481 링크를 방문해 Xavier Dufaure de Citres 글을 참고해 수정할 수 있습니다.

Xavier Dufaure de Citres at 12/14/2014 3:10:58 PM -
Here is a workaround on Android:
* modify System.StartUpCopy
   - in the interface section add "Var ASSET_OVERWRITE : Boolean = false;"
   - in the interface section exopose "procedure CopyStartUpFiles;"
   - in the CopyAssetToFile change "if (not FileExists(DestFileName)) then" by "if (not FileExists(DestFileName)) or ASSET_OVERWRITE then"

* in your own code, store in the preference file the last version the user ran. If the current version is newer do
  if optLastVersionRan<Version then
  Begin
    ASSET_OVERWRITE := true;
    CopyStartUpFiles;
    ASSET_OVERWRITE := false;
  End;

On the 1st installation the data will be copied twice (no biggy), on update the file will be overwritten.

Note for iOS: i find out that deploying the files i need in ".\Data\" is much better: it put the file directly in the bundle, this way the file are not archived (i got my app rejected because i had 12 Mb of data that was archived). Of course these files can only be read only.

 

2, 업데이트할 파일을 새로운 이름으로 배포하고, 앱 시작시 기존 파일로 덮어쓰는 방법 

배포파일이 업데이트 되면 새로운 파일명으로 배포 후 앱 시작 시 원래파일로 덮어쓰는 방식입니다.

위 이미지와 같이, "deploy.txt" 파일 배포 시 remote name을 "deploy_2.txt"로 배포했습니다.

 

프로젝트에는 아래와 같은 코드를 구현했습니다.(코드에 대한 설명은 생략합니다.)

uses
  System.IOUtils;

procedure TForm1.Button1Click(Sender: TObject);
var
  Path: string;
begin
  Path := TPath.Combine(TPath.GetDocumentsPath, 'deploy.txt');
  Memo1.Lines.LoadFromFile(Path);
end;

procedure TForm1.DeployFileUpdate(const AFilename, AUpdateFilename: string);
var
  OrgPath, UptPath: string;
begin
  OrgPath := TPath.Combine(TPath.GetDocumentsPath, AFilename);
  UptPath := TPath.Combine(TPath.GetDocumentsPath, AUpdateFilename);

  if TFile.Exists(UptPath) then
  begin
    if TFile.Exists(OrgPath) then
      TFIle.Delete(OrgPath);
    TFile.Move(UptPath, OrgPath);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DeployFileUpdate('deploy.txt',  'deploy_2.txt');
//  DeployFileUpdate('sound1.wav',  'sound1_2.wav');
//  DeployFileUpdate('env.ini',     'env_2.ini');
end;

 

3, 파일을 앱과 함께 최초 배포 후, 파일 변경이 필요할 경우 인터넷 등을 통해 자동 업데이트 하는 방법

배포파일 자동 업데이트는 파일별 버전관리가 필요하며, 업데이트 파일을 내려주는 서버가 필요합니다.

앱 실행 시 배포파일 버전을  서버에서 확인 후 업데이트할 파일이 있으면, Http, FTP 등으로 파일을 다운로드해 배포파일을 교채하는 방식입니다.

웹상의 파일을 다운로드 받는 방법은 아래 링크를 참고할 수 있습니다.

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15411
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13959
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16495
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22047
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23266
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18920
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39243
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174694
1103 RAD서버에서 데이터를 JSON으로 어떻게 오픈할 수 있을까요? (JSONValue와 JSONWriter 활용하기) 관리자 2020.01.21 318
1102 파이어몽키 TListBox 컴포넌트 사용방법: 사용자 정의 아이템데이터 동적으로 표시하기 file 김원경 2020.01.20 608
1101 [고객사례-유틸리티, C++빌더] Reg Organizer - 시스템 레지스트리 구성&최적화 유틸리티 관리자 2020.01.20 345
1100 제너릭(Generic)과 제너릭을 사용한 예제(제너릭 콜렉션 등) file 김원경 2020.01.15 1228
1099 윈도우 10 룩앤필을 바로 적용할 수 있는 윈도우 10 VCL 컨트롤 소개 file 험프리 2020.01.15 327
1098 C++ 개발자를 위한 파이어닥(FireDAC) 시작하기 관리자 2020.01.14 316
1097 [업데이트][패치][10.3.3] RAD 스튜디오 10.3.3 Indy 서버 SSL 인증서 패치 험프리 2020.01.14 540
1096 [고객사례-게임, 델파이] Tears of Ra 관리자 2020.01.10 436
1095 윈도우10에서의 최신 C++17 관리자 2020.01.07 381
1094 윈도우용 네이티브 앱 개발: 왜 중요할까요? 관리자 2020.01.07 374
1093 High-DPI를 적용한 윈도우 10으로 빠르게 마이그레이션 하기 관리자 2020.01.07 350
1092 MS와 엠바카데로 기술팀이 생각하는 윈도우 애플리케이션의 방향 관리자 2020.01.07 376
1091 마이크로소프트 스토어(Microsoft Store)에 앱 등록하기 - APPX 활용 관리자 2020.01.07 616
1090 RAD서버 활용하기 (엠바카데로 아카데미 코스) 관리자 2020.01.06 283
1089 델파이 RTL: 새로운 제네릭 컬렉션 vs 기존 클래식 컬렉션 험프리 2020.01.06 777
1088 [오픈소스] TGPuttyLib 소개 - PuTTY 기반 SFTP 클라이언트 험프리 2020.01.03 887
1087 [팁] 10.3.3 AAB에서 로컬서비스 실행시 문제점 해결 방법 험프리 2020.01.02 270
1086 이 달의 기술자료 - 2020년 01월 험프리 2019.12.26 395
1085 코드레이지 2019 재생목록 file 험프리 2019.12.26 255
1084 [10.3.3][업데이트][핫픽스] RAD 스튜디오, 델파이, C++빌더 10.3.3 패치 목록 [1] 험프리 2019.12.26 892