@op-engineering/op-sqlite 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +274 -0
- package/android/.project +17 -0
- package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
- package/android/CMakeLists.txt +57 -0
- package/android/build.gradle +127 -0
- package/android/cpp-adapter.cpp +42 -0
- package/android/gradle.properties +4 -0
- package/android/src/main/AndroidManifest.xml +4 -0
- package/android/src/main/java/com/op/sqlite/OPSQLiteBridge.java +29 -0
- package/android/src/main/java/com/op/sqlite/OPSQLiteModule.java +46 -0
- package/android/src/main/java/com/op/sqlite/OPSQLitePackage.java +26 -0
- package/cpp/DynamicHostObject.cpp +30 -0
- package/cpp/DynamicHostObject.h +30 -0
- package/cpp/ThreadPool.cpp +95 -0
- package/cpp/ThreadPool.h +46 -0
- package/cpp/bindings.cpp +430 -0
- package/cpp/bindings.h +13 -0
- package/cpp/bridge.cpp +502 -0
- package/cpp/bridge.h +34 -0
- package/cpp/logs.h +38 -0
- package/cpp/macros.h +16 -0
- package/cpp/sqlbatchexecutor.cpp +94 -0
- package/cpp/sqlbatchexecutor.h +28 -0
- package/cpp/sqlite3.c +252611 -0
- package/cpp/sqlite3.h +13257 -0
- package/cpp/utils.cpp +218 -0
- package/cpp/utils.h +55 -0
- package/ios/OPSQLite.h +8 -0
- package/ios/OPSQLite.mm +63 -0
- package/ios/OPSQLite.xcodeproj/project.pbxproj +275 -0
- package/lib/commonjs/index.js +190 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/module/index.js +183 -0
- package/lib/module/index.js.map +1 -0
- package/lib/typescript/index.d.ts +108 -0
- package/op-sqlite.podspec +39 -0
- package/package.json +79 -0
- package/src/index.ts +374 -0
package/cpp/utils.cpp
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
#include "utils.h"
|
|
2
|
+
#include "DynamicHostObject.h"
|
|
3
|
+
#include <iostream>
|
|
4
|
+
#include <fstream>
|
|
5
|
+
#include "bridge.h"
|
|
6
|
+
|
|
7
|
+
namespace osp {
|
|
8
|
+
|
|
9
|
+
namespace jsi = facebook::jsi;
|
|
10
|
+
|
|
11
|
+
std::any toAny(jsi::Runtime &rt, jsi::Value &value) {
|
|
12
|
+
if (value.isNull() || value.isUndefined())
|
|
13
|
+
{
|
|
14
|
+
return std::any(nullptr);
|
|
15
|
+
}
|
|
16
|
+
else if (value.isBool())
|
|
17
|
+
{
|
|
18
|
+
return std::any(value.getBool());
|
|
19
|
+
}
|
|
20
|
+
else if (value.isNumber())
|
|
21
|
+
{
|
|
22
|
+
double doubleVal = value.asNumber();
|
|
23
|
+
int intVal = (int)doubleVal;
|
|
24
|
+
long long longVal = (long)doubleVal;
|
|
25
|
+
if (intVal == doubleVal)
|
|
26
|
+
{
|
|
27
|
+
return std::any(intVal);
|
|
28
|
+
}
|
|
29
|
+
else if (longVal == doubleVal)
|
|
30
|
+
{
|
|
31
|
+
return std::any(longVal);
|
|
32
|
+
}
|
|
33
|
+
else
|
|
34
|
+
{
|
|
35
|
+
return std::any(doubleVal);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else if (value.isString())
|
|
39
|
+
{
|
|
40
|
+
std::string strVal = value.asString(rt).utf8(rt);
|
|
41
|
+
return std::any(strVal);
|
|
42
|
+
}
|
|
43
|
+
// else if (value.isObject())
|
|
44
|
+
// {
|
|
45
|
+
// auto obj = value.asObject(rt);
|
|
46
|
+
// if (obj.isArrayBuffer(rt))
|
|
47
|
+
// {
|
|
48
|
+
// auto buf = obj.getArrayBuffer(rt);
|
|
49
|
+
// target->push_back(createArrayBufferQuickValue(buf.data(rt), buf.size(rt)));
|
|
50
|
+
// }
|
|
51
|
+
// }
|
|
52
|
+
// else
|
|
53
|
+
// {
|
|
54
|
+
// target->push_back(createNullQuickValue());
|
|
55
|
+
// }
|
|
56
|
+
|
|
57
|
+
throw new std::invalid_argument("Unknown JSI to any value conversion");
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
jsi::Value toJSI(jsi::Runtime &rt, std::any value) {
|
|
61
|
+
const std::type_info &type(value.type());
|
|
62
|
+
|
|
63
|
+
if (type == typeid(NULL) || type == typeid(nullptr))
|
|
64
|
+
{
|
|
65
|
+
return jsi::Value::null();
|
|
66
|
+
}
|
|
67
|
+
else if (type == typeid(bool))
|
|
68
|
+
{
|
|
69
|
+
return std::any_cast<bool>(value);
|
|
70
|
+
}
|
|
71
|
+
else if (type == typeid(int))
|
|
72
|
+
{
|
|
73
|
+
return jsi::Value(std::any_cast<int>(value));
|
|
74
|
+
}
|
|
75
|
+
else if (type == typeid(long long))
|
|
76
|
+
{
|
|
77
|
+
return jsi::Value(static_cast<double>(std::any_cast<long long>(value)));
|
|
78
|
+
}
|
|
79
|
+
else if (type == typeid(double))
|
|
80
|
+
{
|
|
81
|
+
return jsi::Value(std::any_cast<double>(value));
|
|
82
|
+
}
|
|
83
|
+
else if (type == typeid(std::string))
|
|
84
|
+
{
|
|
85
|
+
return jsi::String::createFromUtf8(rt, std::any_cast<std::string>(value));
|
|
86
|
+
}
|
|
87
|
+
else if (type == typeid(const char*))
|
|
88
|
+
{
|
|
89
|
+
return jsi::String::createFromAscii(rt, std::any_cast<const char*>(value));
|
|
90
|
+
}
|
|
91
|
+
// TODO Add support for array buffers
|
|
92
|
+
// else if (value.isObject())
|
|
93
|
+
// {
|
|
94
|
+
// auto obj = value.asObject(rt);
|
|
95
|
+
// if(obj.isArrayBuffer(rt)) {
|
|
96
|
+
// auto buf = obj.getArrayBuffer(rt);
|
|
97
|
+
// sqlite3_bind_blob(statement, sqIndex, buf.data(rt), buf.size(rt), SQLITE_STATIC);
|
|
98
|
+
// }
|
|
99
|
+
//
|
|
100
|
+
// }
|
|
101
|
+
|
|
102
|
+
throw std::invalid_argument("Unsupported scalar type, cannot convert to JSI Value");
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
std::vector<std::any> toAnyVec(jsi::Runtime &rt, jsi::Value const ¶ms)
|
|
106
|
+
{
|
|
107
|
+
std::vector<std::any> res;
|
|
108
|
+
|
|
109
|
+
if (params.isNull() || params.isUndefined())
|
|
110
|
+
{
|
|
111
|
+
return res;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
jsi::Array values = params.asObject(rt).asArray(rt);
|
|
115
|
+
|
|
116
|
+
for (int ii = 0; ii < values.length(rt); ii++)
|
|
117
|
+
{
|
|
118
|
+
jsi::Value value = values.getValueAtIndex(rt, ii);
|
|
119
|
+
res.push_back(toAny(rt, value));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return res;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
jsi::Value createResult(jsi::Runtime &rt,
|
|
126
|
+
BridgeResult status,
|
|
127
|
+
std::vector<std::shared_ptr<DynamicHostObject>> *results,
|
|
128
|
+
std::vector<std::shared_ptr<DynamicHostObject>> *metadata)
|
|
129
|
+
{
|
|
130
|
+
if(status.type == SQLiteError) {
|
|
131
|
+
throw std::invalid_argument(status.message);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
jsi::Object res = jsi::Object(rt);
|
|
135
|
+
|
|
136
|
+
res.setProperty(rt, "rowsAffected", status.affectedRows);
|
|
137
|
+
if (status.affectedRows > 0 && status.insertId != 0)
|
|
138
|
+
{
|
|
139
|
+
res.setProperty(rt, "insertId", jsi::Value(status.insertId));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
size_t rowCount = results->size();
|
|
143
|
+
jsi::Object rows = jsi::Object(rt);
|
|
144
|
+
rows.setProperty(rt, "length", jsi::Value((int)rowCount));
|
|
145
|
+
|
|
146
|
+
if (rowCount > 0)
|
|
147
|
+
{
|
|
148
|
+
auto array = jsi::Array(rt, rowCount);
|
|
149
|
+
for (int i = 0; i < rowCount; i++)
|
|
150
|
+
{
|
|
151
|
+
array.setValueAtIndex(rt, i, jsi::Object::createFromHostObject(rt, results->at(i)));
|
|
152
|
+
}
|
|
153
|
+
rows.setProperty(rt, "_array", std::move(array));
|
|
154
|
+
res.setProperty(rt, "rows", std::move(rows));
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if(metadata != nullptr)
|
|
158
|
+
{
|
|
159
|
+
size_t column_count = metadata->size();
|
|
160
|
+
auto column_array = jsi::Array(rt, column_count);
|
|
161
|
+
for (int i = 0; i < column_count; i++) {
|
|
162
|
+
auto column = metadata->at(i);
|
|
163
|
+
column_array.setValueAtIndex(rt, i, jsi::Object::createFromHostObject(rt, column));
|
|
164
|
+
}
|
|
165
|
+
res.setProperty(rt, "metadata", std::move(column_array));
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return std::move(res);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
BatchResult importSQLFile(std::string dbName, std::string fileLocation)
|
|
172
|
+
{
|
|
173
|
+
std::string line;
|
|
174
|
+
std::ifstream sqFile(fileLocation);
|
|
175
|
+
if (sqFile.is_open())
|
|
176
|
+
{
|
|
177
|
+
try
|
|
178
|
+
{
|
|
179
|
+
int affectedRows = 0;
|
|
180
|
+
int commands = 0;
|
|
181
|
+
sqliteExecuteLiteral(dbName, "BEGIN EXCLUSIVE TRANSACTION");
|
|
182
|
+
while (std::getline(sqFile, line, '\n'))
|
|
183
|
+
{
|
|
184
|
+
if (!line.empty())
|
|
185
|
+
{
|
|
186
|
+
BridgeResult result = sqliteExecuteLiteral(dbName, line);
|
|
187
|
+
if (result.type == SQLiteError)
|
|
188
|
+
{
|
|
189
|
+
sqliteExecuteLiteral(dbName, "ROLLBACK");
|
|
190
|
+
sqFile.close();
|
|
191
|
+
return {SQLiteError, result.message, 0, commands};
|
|
192
|
+
}
|
|
193
|
+
else
|
|
194
|
+
{
|
|
195
|
+
affectedRows += result.affectedRows;
|
|
196
|
+
commands++;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
sqFile.close();
|
|
201
|
+
sqliteExecuteLiteral(dbName, "COMMIT");
|
|
202
|
+
return {SQLiteOk, "", affectedRows, commands};
|
|
203
|
+
}
|
|
204
|
+
catch (...)
|
|
205
|
+
{
|
|
206
|
+
sqFile.close();
|
|
207
|
+
sqliteExecuteLiteral(dbName, "ROLLBACK");
|
|
208
|
+
return {SQLiteError, "[op-sqlite][loadSQLFile] Unexpected error, transaction was rolledback", 0, 0};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
else
|
|
212
|
+
{
|
|
213
|
+
return {SQLiteError, "[op-sqlite][loadSQLFile] Could not open file", 0, 0};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
}
|
package/cpp/utils.h
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#ifndef utils_h
|
|
2
|
+
#define utils_h
|
|
3
|
+
|
|
4
|
+
#include <stdio.h>
|
|
5
|
+
#include <jsi/jsilib.h>
|
|
6
|
+
#include <jsi/jsi.h>
|
|
7
|
+
#include <vector>
|
|
8
|
+
#include <map>
|
|
9
|
+
#include <any>
|
|
10
|
+
#include "DynamicHostObject.h"
|
|
11
|
+
|
|
12
|
+
namespace osp {
|
|
13
|
+
|
|
14
|
+
namespace jsi = facebook::jsi;
|
|
15
|
+
|
|
16
|
+
enum ResultType
|
|
17
|
+
{
|
|
18
|
+
SQLiteOk,
|
|
19
|
+
SQLiteError
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
struct BridgeResult
|
|
23
|
+
{
|
|
24
|
+
ResultType type;
|
|
25
|
+
std::string message;
|
|
26
|
+
int affectedRows;
|
|
27
|
+
double insertId;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
struct BatchResult
|
|
31
|
+
{
|
|
32
|
+
ResultType type;
|
|
33
|
+
std::string message;
|
|
34
|
+
int affectedRows;
|
|
35
|
+
int commands;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
std::any toAny(jsi::Runtime &rt, jsi::Value &value);
|
|
39
|
+
|
|
40
|
+
// TODO I tried to inline this function but it is not working
|
|
41
|
+
// throws an undefined Symbol
|
|
42
|
+
jsi::Value toJSI(jsi::Runtime &rt, std::any value);
|
|
43
|
+
|
|
44
|
+
std::vector<std::any> toAnyVec(jsi::Runtime &rt, jsi::Value const &args);
|
|
45
|
+
|
|
46
|
+
jsi::Value createResult(jsi::Runtime &rt,
|
|
47
|
+
BridgeResult status,
|
|
48
|
+
std::vector<std::shared_ptr<DynamicHostObject>> *results,
|
|
49
|
+
std::vector<std::shared_ptr<DynamicHostObject>> *metadata);
|
|
50
|
+
|
|
51
|
+
BatchResult importSQLFile(std::string dbName, std::string fileLocation);
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#endif /* utils_h */
|
package/ios/OPSQLite.h
ADDED
package/ios/OPSQLite.mm
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#import "OPSQLite.h"
|
|
2
|
+
|
|
3
|
+
#import <React/RCTBridge+Private.h>
|
|
4
|
+
|
|
5
|
+
#import <React/RCTUtils.h>
|
|
6
|
+
#import <ReactCommon/RCTTurboModule.h>
|
|
7
|
+
#import <jsi/jsi.h>
|
|
8
|
+
|
|
9
|
+
#import "../cpp/bindings.h"
|
|
10
|
+
|
|
11
|
+
@implementation OPSQLite
|
|
12
|
+
|
|
13
|
+
RCT_EXPORT_MODULE(OPSQLite)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) {
|
|
17
|
+
NSLog(@"Installing OPSQLite module...");
|
|
18
|
+
|
|
19
|
+
RCTBridge *bridge = [RCTBridge currentBridge];
|
|
20
|
+
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)bridge;
|
|
21
|
+
if (cxxBridge == nil) {
|
|
22
|
+
return @false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
using namespace facebook;
|
|
26
|
+
|
|
27
|
+
auto jsiRuntime = (jsi::Runtime *)cxxBridge.runtime;
|
|
28
|
+
if (jsiRuntime == nil) {
|
|
29
|
+
return @false;
|
|
30
|
+
}
|
|
31
|
+
auto &runtime = *jsiRuntime;
|
|
32
|
+
auto callInvoker = bridge.jsCallInvoker;
|
|
33
|
+
|
|
34
|
+
// Get appGroupID value from Info.plist using key "AppGroup"
|
|
35
|
+
NSString *appGroupID = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"OPSQLite_AppGroup"];
|
|
36
|
+
NSString *documentPath;
|
|
37
|
+
|
|
38
|
+
if (appGroupID != nil) {
|
|
39
|
+
// Get the app groups container storage url
|
|
40
|
+
NSFileManager *fileManager = [NSFileManager defaultManager];
|
|
41
|
+
NSURL *storeUrl = [fileManager containerURLForSecurityApplicationGroupIdentifier:appGroupID];
|
|
42
|
+
|
|
43
|
+
if (storeUrl == nil) {
|
|
44
|
+
NSLog(@"Invalid AppGroup ID provided (%@). Check the value of \"AppGroup\" in your Info.plist file", appGroupID);
|
|
45
|
+
return @false;
|
|
46
|
+
}
|
|
47
|
+
NSLog(@"Configured with AppGroup ID: %@", appGroupID);
|
|
48
|
+
|
|
49
|
+
documentPath = [storeUrl path];
|
|
50
|
+
} else {
|
|
51
|
+
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, true);
|
|
52
|
+
documentPath = [paths objectAtIndex:0];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
osp::install(runtime, callInvoker, [documentPath UTF8String]);
|
|
56
|
+
return @true;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
- (void)invalidate {
|
|
60
|
+
osp::clearState();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@end
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
// !$*UTF8*$!
|
|
2
|
+
{
|
|
3
|
+
archiveVersion = 1;
|
|
4
|
+
classes = {
|
|
5
|
+
};
|
|
6
|
+
objectVersion = 46;
|
|
7
|
+
objects = {
|
|
8
|
+
|
|
9
|
+
/* Begin PBXBuildFile section */
|
|
10
|
+
5E555C0D2413F4C50049A1A2 /* OPSQLite.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* OPSQLite.mm */; };
|
|
11
|
+
/* End PBXBuildFile section */
|
|
12
|
+
|
|
13
|
+
/* Begin PBXCopyFilesBuildPhase section */
|
|
14
|
+
58B511D91A9E6C8500147676 /* CopyFiles */ = {
|
|
15
|
+
isa = PBXCopyFilesBuildPhase;
|
|
16
|
+
buildActionMask = 2147483647;
|
|
17
|
+
dstPath = "include/$(PRODUCT_NAME)";
|
|
18
|
+
dstSubfolderSpec = 16;
|
|
19
|
+
files = (
|
|
20
|
+
);
|
|
21
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
22
|
+
};
|
|
23
|
+
/* End PBXCopyFilesBuildPhase section */
|
|
24
|
+
|
|
25
|
+
/* Begin PBXFileReference section */
|
|
26
|
+
134814201AA4EA6300B7C361 /* libOPSQLite.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libOPSQLite.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
27
|
+
B3E7B5891CC2AC0600A0062D /* OPSQLite.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OPSQLite.mm; sourceTree = "<group>"; };
|
|
28
|
+
/* End PBXFileReference section */
|
|
29
|
+
|
|
30
|
+
/* Begin PBXFrameworksBuildPhase section */
|
|
31
|
+
58B511D81A9E6C8500147676 /* Frameworks */ = {
|
|
32
|
+
isa = PBXFrameworksBuildPhase;
|
|
33
|
+
buildActionMask = 2147483647;
|
|
34
|
+
files = (
|
|
35
|
+
);
|
|
36
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
37
|
+
};
|
|
38
|
+
/* End PBXFrameworksBuildPhase section */
|
|
39
|
+
|
|
40
|
+
/* Begin PBXGroup section */
|
|
41
|
+
134814211AA4EA7D00B7C361 /* Products */ = {
|
|
42
|
+
isa = PBXGroup;
|
|
43
|
+
children = (
|
|
44
|
+
134814201AA4EA6300B7C361 /* libOPSQLite.a */,
|
|
45
|
+
);
|
|
46
|
+
name = Products;
|
|
47
|
+
sourceTree = "<group>";
|
|
48
|
+
};
|
|
49
|
+
58B511D21A9E6C8500147676 = {
|
|
50
|
+
isa = PBXGroup;
|
|
51
|
+
children = (
|
|
52
|
+
B3E7B5891CC2AC0600A0062D /* OPSQLite.mm */,
|
|
53
|
+
134814211AA4EA7D00B7C361 /* Products */,
|
|
54
|
+
);
|
|
55
|
+
sourceTree = "<group>";
|
|
56
|
+
};
|
|
57
|
+
/* End PBXGroup section */
|
|
58
|
+
|
|
59
|
+
/* Begin PBXNativeTarget section */
|
|
60
|
+
58B511DA1A9E6C8500147676 /* OPSQLite */ = {
|
|
61
|
+
isa = PBXNativeTarget;
|
|
62
|
+
buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "OPSQLite" */;
|
|
63
|
+
buildPhases = (
|
|
64
|
+
58B511D71A9E6C8500147676 /* Sources */,
|
|
65
|
+
58B511D81A9E6C8500147676 /* Frameworks */,
|
|
66
|
+
58B511D91A9E6C8500147676 /* CopyFiles */,
|
|
67
|
+
);
|
|
68
|
+
buildRules = (
|
|
69
|
+
);
|
|
70
|
+
dependencies = (
|
|
71
|
+
);
|
|
72
|
+
name = OPSQLite;
|
|
73
|
+
productName = RCTDataManager;
|
|
74
|
+
productReference = 134814201AA4EA6300B7C361 /* libOPSQLite.a */;
|
|
75
|
+
productType = "com.apple.product-type.library.static";
|
|
76
|
+
};
|
|
77
|
+
/* End PBXNativeTarget section */
|
|
78
|
+
|
|
79
|
+
/* Begin PBXProject section */
|
|
80
|
+
58B511D31A9E6C8500147676 /* Project object */ = {
|
|
81
|
+
isa = PBXProject;
|
|
82
|
+
attributes = {
|
|
83
|
+
LastUpgradeCheck = 0920;
|
|
84
|
+
ORGANIZATIONNAME = Facebook;
|
|
85
|
+
TargetAttributes = {
|
|
86
|
+
58B511DA1A9E6C8500147676 = {
|
|
87
|
+
CreatedOnToolsVersion = 6.1.1;
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
buildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "OPSQLite" */;
|
|
92
|
+
compatibilityVersion = "Xcode 3.2";
|
|
93
|
+
developmentRegion = English;
|
|
94
|
+
hasScannedForEncodings = 0;
|
|
95
|
+
knownRegions = (
|
|
96
|
+
English,
|
|
97
|
+
en,
|
|
98
|
+
);
|
|
99
|
+
mainGroup = 58B511D21A9E6C8500147676;
|
|
100
|
+
productRefGroup = 58B511D21A9E6C8500147676;
|
|
101
|
+
projectDirPath = "";
|
|
102
|
+
projectRoot = "";
|
|
103
|
+
targets = (
|
|
104
|
+
58B511DA1A9E6C8500147676 /* OPSQLite */,
|
|
105
|
+
);
|
|
106
|
+
};
|
|
107
|
+
/* End PBXProject section */
|
|
108
|
+
|
|
109
|
+
/* Begin PBXSourcesBuildPhase section */
|
|
110
|
+
58B511D71A9E6C8500147676 /* Sources */ = {
|
|
111
|
+
isa = PBXSourcesBuildPhase;
|
|
112
|
+
buildActionMask = 2147483647;
|
|
113
|
+
files = (
|
|
114
|
+
5E555C0D2413F4C50049A1A2 /* OPSQLite.mm in Sources */,
|
|
115
|
+
);
|
|
116
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
117
|
+
};
|
|
118
|
+
/* End PBXSourcesBuildPhase section */
|
|
119
|
+
|
|
120
|
+
/* Begin XCBuildConfiguration section */
|
|
121
|
+
58B511ED1A9E6C8500147676 /* Debug */ = {
|
|
122
|
+
isa = XCBuildConfiguration;
|
|
123
|
+
buildSettings = {
|
|
124
|
+
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
125
|
+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
|
126
|
+
CLANG_CXX_LIBRARY = "libc++";
|
|
127
|
+
CLANG_ENABLE_MODULES = YES;
|
|
128
|
+
CLANG_ENABLE_OBJC_ARC = YES;
|
|
129
|
+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
130
|
+
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
131
|
+
CLANG_WARN_COMMA = YES;
|
|
132
|
+
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
133
|
+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
134
|
+
CLANG_WARN_EMPTY_BODY = YES;
|
|
135
|
+
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
136
|
+
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
137
|
+
CLANG_WARN_INT_CONVERSION = YES;
|
|
138
|
+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
139
|
+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
140
|
+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
141
|
+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
142
|
+
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
143
|
+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
144
|
+
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
145
|
+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
146
|
+
COPY_PHASE_STRIP = NO;
|
|
147
|
+
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
148
|
+
ENABLE_TESTABILITY = YES;
|
|
149
|
+
GCC_C_LANGUAGE_STANDARD = gnu99;
|
|
150
|
+
GCC_DYNAMIC_NO_PIC = NO;
|
|
151
|
+
GCC_NO_COMMON_BLOCKS = YES;
|
|
152
|
+
GCC_OPTIMIZATION_LEVEL = 0;
|
|
153
|
+
GCC_PREPROCESSOR_DEFINITIONS = (
|
|
154
|
+
"DEBUG=1",
|
|
155
|
+
"$(inherited)",
|
|
156
|
+
);
|
|
157
|
+
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
|
158
|
+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
159
|
+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
160
|
+
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
161
|
+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
162
|
+
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
163
|
+
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
164
|
+
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
|
165
|
+
MTL_ENABLE_DEBUG_INFO = YES;
|
|
166
|
+
ONLY_ACTIVE_ARCH = YES;
|
|
167
|
+
SDKROOT = iphoneos;
|
|
168
|
+
};
|
|
169
|
+
name = Debug;
|
|
170
|
+
};
|
|
171
|
+
58B511EE1A9E6C8500147676 /* Release */ = {
|
|
172
|
+
isa = XCBuildConfiguration;
|
|
173
|
+
buildSettings = {
|
|
174
|
+
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
175
|
+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
|
176
|
+
CLANG_CXX_LIBRARY = "libc++";
|
|
177
|
+
CLANG_ENABLE_MODULES = YES;
|
|
178
|
+
CLANG_ENABLE_OBJC_ARC = YES;
|
|
179
|
+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
180
|
+
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
181
|
+
CLANG_WARN_COMMA = YES;
|
|
182
|
+
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
183
|
+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
184
|
+
CLANG_WARN_EMPTY_BODY = YES;
|
|
185
|
+
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
186
|
+
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
187
|
+
CLANG_WARN_INT_CONVERSION = YES;
|
|
188
|
+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
189
|
+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
190
|
+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
191
|
+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
192
|
+
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
193
|
+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
194
|
+
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
195
|
+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
196
|
+
COPY_PHASE_STRIP = YES;
|
|
197
|
+
ENABLE_NS_ASSERTIONS = NO;
|
|
198
|
+
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
199
|
+
GCC_C_LANGUAGE_STANDARD = gnu99;
|
|
200
|
+
GCC_NO_COMMON_BLOCKS = YES;
|
|
201
|
+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
202
|
+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
203
|
+
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
204
|
+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
205
|
+
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
206
|
+
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
207
|
+
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
|
208
|
+
MTL_ENABLE_DEBUG_INFO = NO;
|
|
209
|
+
SDKROOT = iphoneos;
|
|
210
|
+
VALIDATE_PRODUCT = YES;
|
|
211
|
+
};
|
|
212
|
+
name = Release;
|
|
213
|
+
};
|
|
214
|
+
58B511F01A9E6C8500147676 /* Debug */ = {
|
|
215
|
+
isa = XCBuildConfiguration;
|
|
216
|
+
buildSettings = {
|
|
217
|
+
HEADER_SEARCH_PATHS = (
|
|
218
|
+
"$(inherited)",
|
|
219
|
+
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
|
220
|
+
"$(SRCROOT)/../../../React/**",
|
|
221
|
+
"$(SRCROOT)/../../react-native/React/**",
|
|
222
|
+
);
|
|
223
|
+
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
|
224
|
+
OTHER_LDFLAGS = "-ObjC";
|
|
225
|
+
PRODUCT_NAME = OPSQLite;
|
|
226
|
+
SKIP_INSTALL = YES;
|
|
227
|
+
SWIFT_OBJC_BRIDGING_HEADER = "OPSQLite-Bridging-Header.h";
|
|
228
|
+
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
|
229
|
+
SWIFT_VERSION = 5.0;
|
|
230
|
+
};
|
|
231
|
+
name = Debug;
|
|
232
|
+
};
|
|
233
|
+
58B511F11A9E6C8500147676 /* Release */ = {
|
|
234
|
+
isa = XCBuildConfiguration;
|
|
235
|
+
buildSettings = {
|
|
236
|
+
HEADER_SEARCH_PATHS = (
|
|
237
|
+
"$(inherited)",
|
|
238
|
+
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
|
239
|
+
"$(SRCROOT)/../../../React/**",
|
|
240
|
+
"$(SRCROOT)/../../react-native/React/**",
|
|
241
|
+
);
|
|
242
|
+
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
|
243
|
+
OTHER_LDFLAGS = "-ObjC";
|
|
244
|
+
PRODUCT_NAME = OPSQLite;
|
|
245
|
+
SKIP_INSTALL = YES;
|
|
246
|
+
SWIFT_OBJC_BRIDGING_HEADER = "OPSQLite-Bridging-Header.h";
|
|
247
|
+
SWIFT_VERSION = 5.0;
|
|
248
|
+
};
|
|
249
|
+
name = Release;
|
|
250
|
+
};
|
|
251
|
+
/* End XCBuildConfiguration section */
|
|
252
|
+
|
|
253
|
+
/* Begin XCConfigurationList section */
|
|
254
|
+
58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "OPSQLite" */ = {
|
|
255
|
+
isa = XCConfigurationList;
|
|
256
|
+
buildConfigurations = (
|
|
257
|
+
58B511ED1A9E6C8500147676 /* Debug */,
|
|
258
|
+
58B511EE1A9E6C8500147676 /* Release */,
|
|
259
|
+
);
|
|
260
|
+
defaultConfigurationIsVisible = 0;
|
|
261
|
+
defaultConfigurationName = Release;
|
|
262
|
+
};
|
|
263
|
+
58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "OPSQLite" */ = {
|
|
264
|
+
isa = XCConfigurationList;
|
|
265
|
+
buildConfigurations = (
|
|
266
|
+
58B511F01A9E6C8500147676 /* Debug */,
|
|
267
|
+
58B511F11A9E6C8500147676 /* Release */,
|
|
268
|
+
);
|
|
269
|
+
defaultConfigurationIsVisible = 0;
|
|
270
|
+
defaultConfigurationName = Release;
|
|
271
|
+
};
|
|
272
|
+
/* End XCConfigurationList section */
|
|
273
|
+
};
|
|
274
|
+
rootObject = 58B511D31A9E6C8500147676 /* Project object */;
|
|
275
|
+
}
|