forked from dcariola/XCodeEditor-for-Unity
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPBXBuildFile.cs
145 lines (123 loc) · 3.63 KB
/
PBXBuildFile.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
namespace UnityEditor.SKZXCodeEditor
{
public class PBXBuildFile : PBXObject
{
private const string FILE_REF_KEY = "fileRef";
private const string SETTINGS_KEY = "settings";
private const string ATTRIBUTES_KEY = "ATTRIBUTES";
private const string WEAK_VALUE = "Weak";
private const string COMPILER_FLAGS_KEY = "COMPILER_FLAGS";
private const string CODE_SIGN_VALUE = "CodeSignOnCopy";
private const string REMOVE_HEADERS_VALUE = "RemoveHeadersOnCopy";
public PBXBuildFile( PBXFileReference fileRef, bool weak = false, bool embed = false ) : base()
{
this.Add( FILE_REF_KEY, fileRef.guid );
SetWeakLink( weak );
}
public PBXBuildFile( string guid, PBXDictionary dictionary ) : base ( guid, dictionary )
{
}
public bool SetEmbed( bool embed = false )
{
PBXDictionary settings = null;
PBXList attributes = null;
if( !_data.ContainsKey( SETTINGS_KEY ) ) {
if( embed ) {
attributes = new PBXList();
attributes.Add( CODE_SIGN_VALUE );
attributes.Add( REMOVE_HEADERS_VALUE );
settings = new PBXDictionary();
settings.Add( ATTRIBUTES_KEY, attributes );
_data[ SETTINGS_KEY ] = settings;
}
return true;
}
settings = _data[ SETTINGS_KEY ] as PBXDictionary;
if( !settings.ContainsKey( ATTRIBUTES_KEY ) ) {
if( embed ) {
attributes = new PBXList();
attributes.Add( CODE_SIGN_VALUE );
attributes.Add( REMOVE_HEADERS_VALUE );
settings.Add( ATTRIBUTES_KEY, attributes );
return true;
}
else {
return false;
}
}
else {
attributes = settings[ ATTRIBUTES_KEY ] as PBXList;
}
if( embed ) {
attributes.Add( CODE_SIGN_VALUE );
attributes.Add( REMOVE_HEADERS_VALUE );
}
/*
* No need to remove these
* else {
attributes.Remove( WEAK_VALUE );
}*/
settings.Add( ATTRIBUTES_KEY, attributes );
this.Add( SETTINGS_KEY, settings );
return true;
}
public bool SetWeakLink( bool weak = false )
{
PBXDictionary settings = null;
PBXList attributes = null;
if( !_data.ContainsKey( SETTINGS_KEY ) ) {
if( weak ) {
attributes = new PBXList();
attributes.Add( WEAK_VALUE );
settings = new PBXDictionary();
settings.Add( ATTRIBUTES_KEY, attributes );
_data[ SETTINGS_KEY ] = settings;
}
return true;
}
settings = _data[ SETTINGS_KEY ] as PBXDictionary;
if( !settings.ContainsKey( ATTRIBUTES_KEY ) ) {
if( weak ) {
attributes = new PBXList();
attributes.Add( WEAK_VALUE );
settings.Add( ATTRIBUTES_KEY, attributes );
return true;
}
else {
return false;
}
}
else {
attributes = settings[ ATTRIBUTES_KEY ] as PBXList;
}
if( weak ) {
attributes.Add( WEAK_VALUE );
}
else {
attributes.Remove( WEAK_VALUE );
}
settings.Add( ATTRIBUTES_KEY, attributes );
this.Add( SETTINGS_KEY, settings );
return true;
}
public bool AddCompilerFlag( string flag )
{
if( !_data.ContainsKey( SETTINGS_KEY ) )
_data[ SETTINGS_KEY ] = new PBXDictionary();
if( !((PBXDictionary)_data[ SETTINGS_KEY ]).ContainsKey( COMPILER_FLAGS_KEY ) ) {
((PBXDictionary)_data[ SETTINGS_KEY ]).Add( COMPILER_FLAGS_KEY, flag );
return true;
}
string[] flags = ((string)((PBXDictionary)_data[ SETTINGS_KEY ])[ COMPILER_FLAGS_KEY ]).Split( ' ' );
foreach( string item in flags ) {
if( item.CompareTo( flag ) == 0 )
return false;
}
((PBXDictionary)_data[ SETTINGS_KEY ])[ COMPILER_FLAGS_KEY ] = ( string.Join( " ", flags ) + " " + flag );
return true;
}
}
}