project.pbxproj를 가지고 Xcode 식별 파일을 추가합니다

8915 단어 XcodeiOS

프로젝트 생성 시

~/Documents/workspace_lab/DIFFER (master) % git status
On branch master
nothing to commit, working tree clean
일단 차이가 없는 상태를 유지하도록 하겠습니다.

파일을 추가할 때


일단 샘플.swift라는 파일을 프로젝트의 루트에 놓아 보세요.
DIFFER.xcodeproj/project.pbxproj(0~27행 근처)
// !$*UTF8*$!
{
    archiveVersion = 1;
    classes = {
    };
    objectVersion = 46;
    objects = {

/* Begin PBXBuildFile section */
        D72405291DFB285900502D3D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72405281DFB285900502D3D /* AppDelegate.swift */; };
        D724052B1DFB285900502D3D /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D724052A1DFB285900502D3D /* ViewController.swift */; };
        D724052E1DFB285900502D3D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D724052C1DFB285900502D3D /* Main.storyboard */; };
        D72405301DFB285900502D3D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D724052F1DFB285900502D3D /* Assets.xcassets */; };
        D72405331DFB285900502D3D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D72405311DFB285900502D3D /* LaunchScreen.storyboard */; };
+       D724053B1DFB290200502D3D /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = D724053A1DFB290200502D3D /* Sample.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
        D72405251DFB285900502D3D /* DIFFER.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DIFFER.app; sourceTree = BUILT_PRODUCTS_DIR; };
        D72405281DFB285900502D3D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
        D724052A1DFB285900502D3D /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
        D724052D1DFB285900502D3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
        D724052F1DFB285900502D3D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
        D72405321DFB285900502D3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
        D72405341DFB285900502D3D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+       D724053A1DFB290200502D3D /* Sample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sample.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
DIFFER.xcodeproj/project.pbxproj (40 줄 근처)
/* Begin PBXGroup section */
        D724051C1DFB285900502D3D = {
            isa = PBXGroup;
            children = (
                D72405271DFB285900502D3D /* DIFFER */,
                D72405261DFB285900502D3D /* Products */,
            );
            sourceTree = "<group>";
        };
        D72405261DFB285900502D3D /* Products */ = {
            isa = PBXGroup;
            children = (
                D72405251DFB285900502D3D /* DIFFER.app */,
            );
            name = Products;
            sourceTree = "<group>";
        };
        D72405271DFB285900502D3D /* DIFFER */ = {
            isa = PBXGroup;
            children = (
+               D724053A1DFB290200502D3D /* Sample.swift */,
                D72405281DFB285900502D3D /* AppDelegate.swift */,
                D724052A1DFB285900502D3D /* ViewController.swift */,
                D724052C1DFB285900502D3D /* Main.storyboard */,
                D724052F1DFB285900502D3D /* Assets.xcassets */,
                D72405311DFB285900502D3D /* LaunchScreen.storyboard */,
                D72405341DFB285900502D3D /* Info.plist */,
            );
            path = DIFFER;
            sourceTree = "<group>";
        };
/* End PBXGroup section */
DIFFER.xcodeproj/project.pbxproj (138행 근처)
/* Begin PBXSourcesBuildPhase section */
        D72405211DFB285900502D3D /* Sources */ = {
            isa = PBXSourcesBuildPhase;
            buildActionMask = 2147483647;
            files = (
                D724052B1DFB285900502D3D /* ViewController.swift in Sources */,
+               D724053B1DFB290200502D3D /* Sample.swift in Sources */,
                D72405291DFB285900502D3D /* AppDelegate.swift in Sources */,
            );
            runOnlyForDeploymentPostprocessing = 0;
        };
/* End PBXSourcesBuildPhase section */
이상 4건의 차이점이 나왔습니다.

PBXBuildFile Section


우선
/* Begin PBXBuildFile section */
에서 기술한 장면은 다음 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 둘레를 분석하도록 한다.
이 부분을 삭제하면 대상 구성원 Ship이 취소되고 구축할 파일 목록이 표시됩니다.

PBXFileReference Section


다음
/* Begin PBXFileReference section */
부분의 차이는 있지만 이쪽에서 삭제하면 Xcode의 일람에서 사라집니다.
이름에서도 파일 인용 부분을 관리하는 것 같습니다.

PBXGroup Section


이것은 Xcode의 디렉터리 차원 구조의 위치를 가리킨다.
```
D724051C1DFB285900502D3D = {
}
```
루트 차원 구조입니다. 그 중의 요소는children에서 정의됩니다.

PBXSourcesBuildPhase Section


여기는 Xcode의 Build Phases의 Comple Source 일람표인 것 같습니다.

Xcode 처리 재현 및 파일 추가


project.pbxproj를 직접 편집하고 파일을 추가합니다.
먼저 Sample2.swift 파일을 프로젝트/프로젝트 이름 아래에 배치합니다.

이때 Xcode는 당연히 파일을 인식하지 못합니다.

PBXBuildFile Section


여기는 구축 목표 파일을 관리하는 곳입니다.
Sample.swift를 추가할 때 다음과 같습니다.
D724053B1DFB290200502D3D /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = D724053A1DFB290200502D3D /* Sample.swift */; };
이것은 마치 독특한 관건점에isa,fileRef라는 요소를 전달한 것 같다.
SAMPLE2BUILDFILEREF = {
  isa = PBXBuildFile;
  fileRef = SAMPLE2FILEREF;
};
이런 느낌인가요?

PBXFileReference Section

D724053A1DFB290200502D3D /* Sample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sample.swift; sourceTree = "<group>"; };
여기서 주의해야 할 것은 D724053A1DFB290200502D3D 부분은 PBXBuildFile에서 fileRef로 지정한 값과 같다는 것이다.
SAMPLE2FILEREF = {
  isa = PBXFileReference;
  fileEncoding = 4;
  lastKnownFileType = sourcecode.swift;
  path = Sample2.swift;
  sourceTree = "<group>";
};
path는 프로젝트명/프로젝트명 이하에서 시작합니까...?

PBXGroup Section


샘플입니다.swift와 같은 곳에 두고 싶어서children에 추가합니다.
children = (
                D72405281DFB285900502D3D /* AppDelegate.swift */,
                D724053A1DFB290200502D3D /* Sample.swift */,
                D724052A1DFB285900502D3D /* ViewController.swift */,
                D724052C1DFB285900502D3D /* Main.storyboard */,
                D724052F1DFB285900502D3D /* Assets.xcassets */,
                D72405311DFB285900502D3D /* LaunchScreen.storyboard */,
                D72405341DFB285900502D3D /* Info.plist */,
                SAMPLE2FILEREF,
            );
여기도 File Ref를 사용하고 있어요.

PBXSourcesBuildPhase Section


PBXBuildFile 열쇠인 것 같습니다.구축 목표에서 선택한 느낌인가요?
files = (
                D724052B1DFB285900502D3D /* ViewController.swift in Sources */,
                D724053B1DFB290200502D3D /* Sample.swift in Sources */,
                D72405291DFB285900502D3D /* AppDelegate.swift in Sources */,
                SAMPLE2BUILDFILEREF,
            );

결과를 보충하여 기록하다.



Xcode도 잘 알게 됐어요.

특히 fileRef와 구축 관리의 ID 이름은 투시된 적이 없는 것 같습니다.

좋은 웹페이지 즐겨찾기