ios demo version
This commit is contained in:
BIN
ios/Flutter/App.framework/App
Executable file
BIN
ios/Flutter/App.framework/App
Executable file
Binary file not shown.
30
ios/Flutter/App.framework/Info.plist
Normal file
30
ios/Flutter/App.framework/Info.plist
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>App</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>io.flutter.flutter.app</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>App</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
<array>
|
||||||
|
<string>arm64</string>
|
||||||
|
</array>
|
||||||
|
<key>MinimumOSVersion</key>
|
||||||
|
<string>8.0</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
18
ios/Flutter/Flutter.framework/Headers/Flutter.h
Normal file
18
ios/Flutter/Flutter.framework/Headers/Flutter.h
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
// Copyright 2016 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef FLUTTER_FLUTTER_H_
|
||||||
|
#define FLUTTER_FLUTTER_H_
|
||||||
|
|
||||||
|
#include "FlutterAppDelegate.h"
|
||||||
|
#include "FlutterBinaryMessenger.h"
|
||||||
|
#include "FlutterChannels.h"
|
||||||
|
#include "FlutterCodecs.h"
|
||||||
|
#include "FlutterDartProject.h"
|
||||||
|
#include "FlutterMacros.h"
|
||||||
|
#include "FlutterNavigationController.h"
|
||||||
|
#include "FlutterPlugin.h"
|
||||||
|
#include "FlutterViewController.h"
|
||||||
|
|
||||||
|
#endif // FLUTTER_FLUTTER_H_
|
||||||
39
ios/Flutter/Flutter.framework/Headers/FlutterAppDelegate.h
Normal file
39
ios/Flutter/Flutter.framework/Headers/FlutterAppDelegate.h
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// Copyright 2016 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef FLUTTER_FLUTTERAPPDELEGATE_H_
|
||||||
|
#define FLUTTER_FLUTTERAPPDELEGATE_H_
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#include "FlutterMacros.h"
|
||||||
|
#include "FlutterPlugin.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UIApplicationDelegate subclass for simple apps that want default behavior.
|
||||||
|
*
|
||||||
|
* This class provides the following behaviors:
|
||||||
|
* * Status bar touches are forwarded to the key window's root view
|
||||||
|
* FlutterViewController, in order to trigger scroll to top.
|
||||||
|
* * Keeps the Flutter connection open in debug mode when the phone screen
|
||||||
|
* locks.
|
||||||
|
*
|
||||||
|
* App delegates for Flutter applications are *not* required to inherit from
|
||||||
|
* this class. Developers of custom app delegate classes should copy and paste
|
||||||
|
* code as necessary from FlutterAppDelegate.mm.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterAppDelegate : UIResponder<UIApplicationDelegate, FlutterPluginRegistry>
|
||||||
|
|
||||||
|
@property(strong, nonatomic) UIWindow* window;
|
||||||
|
|
||||||
|
// Can be overriden by subclasses to provide a custom FlutterBinaryMessenger,
|
||||||
|
// typically a FlutterViewController, for plugin interop.
|
||||||
|
//
|
||||||
|
// Defaults to window's rootViewController.
|
||||||
|
- (NSObject<FlutterBinaryMessenger>*)binaryMessenger;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif // FLUTTER_FLUTTERDARTPROJECT_H_
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
// Copyright 2017 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef FLUTTER_FLUTTERBINARYMESSENGER_H_
|
||||||
|
#define FLUTTER_FLUTTERBINARYMESSENGER_H_
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#include "FlutterMacros.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
/**
|
||||||
|
A message reply callback.
|
||||||
|
|
||||||
|
Used for submitting a binary reply back to a Flutter message sender. Also used
|
||||||
|
in the dual capacity for handling a binary message reply received from Flutter.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- reply: The reply.
|
||||||
|
*/
|
||||||
|
typedef void (^FlutterBinaryReply)(NSData* _Nullable reply);
|
||||||
|
|
||||||
|
/**
|
||||||
|
A strategy for handling incoming binary messages from Flutter and to send
|
||||||
|
asynchronous replies back to Flutter.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- message: The message.
|
||||||
|
- reply: A callback for submitting a reply to the sender.
|
||||||
|
*/
|
||||||
|
typedef void (^FlutterBinaryMessageHandler)(NSData* _Nullable message, FlutterBinaryReply reply);
|
||||||
|
|
||||||
|
/**
|
||||||
|
A facility for communicating with the Flutter side using asynchronous message
|
||||||
|
passing with binary messages.
|
||||||
|
|
||||||
|
- SeeAlso:
|
||||||
|
- `FlutterBasicMessageChannel`, which supports communication using structured
|
||||||
|
messages.
|
||||||
|
- `FlutterMethodChannel`, which supports communication using asynchronous
|
||||||
|
method calls.
|
||||||
|
- `FlutterEventChannel`, which supports commuication using event streams.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@protocol FlutterBinaryMessenger<NSObject>
|
||||||
|
/**
|
||||||
|
Sends a binary message to the Flutter side on the specified channel, expecting
|
||||||
|
no reply.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- channel: The channel name.
|
||||||
|
- message: The message.
|
||||||
|
*/
|
||||||
|
- (void)sendOnChannel:(NSString*)channel message:(NSData* _Nullable)message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sends a binary message to the Flutter side on the specified channel, expecting
|
||||||
|
an asynchronous reply.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- channel: The channel name.
|
||||||
|
- message: The message.
|
||||||
|
- callback: A callback for receiving a reply.
|
||||||
|
*/
|
||||||
|
- (void)sendOnChannel:(NSString*)channel
|
||||||
|
message:(NSData* _Nullable)message
|
||||||
|
binaryReply:(FlutterBinaryReply _Nullable)callback;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Registers a message handler for incoming binary messages from the Flutter side
|
||||||
|
on the specified channel.
|
||||||
|
|
||||||
|
Replaces any existing handler. Use a `nil` handler for unregistering the
|
||||||
|
existing handler.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- channel: The channel name.
|
||||||
|
- handler: The message handler.
|
||||||
|
*/
|
||||||
|
- (void)setMessageHandlerOnChannel:(NSString*)channel
|
||||||
|
binaryMessageHandler:(FlutterBinaryMessageHandler _Nullable)handler;
|
||||||
|
@end
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
|
#endif // FLUTTER_FLUTTERBINARYMESSENGER_H_
|
||||||
380
ios/Flutter/Flutter.framework/Headers/FlutterChannels.h
Normal file
380
ios/Flutter/Flutter.framework/Headers/FlutterChannels.h
Normal file
@@ -0,0 +1,380 @@
|
|||||||
|
// Copyright 2017 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef FLUTTER_FLUTTERCHANNELS_H_
|
||||||
|
#define FLUTTER_FLUTTERCHANNELS_H_
|
||||||
|
|
||||||
|
#include "FlutterBinaryMessenger.h"
|
||||||
|
#include "FlutterCodecs.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
/**
|
||||||
|
A message reply callback.
|
||||||
|
|
||||||
|
Used for submitting a reply back to a Flutter message sender. Also used in
|
||||||
|
the dual capacity for handling a message reply received from Flutter.
|
||||||
|
|
||||||
|
- Parameter reply: The reply.
|
||||||
|
*/
|
||||||
|
typedef void (^FlutterReply)(id _Nullable reply);
|
||||||
|
|
||||||
|
/**
|
||||||
|
A strategy for handling incoming messages from Flutter and to send
|
||||||
|
asynchronous replies back to Flutter.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- message: The message.
|
||||||
|
- reply: A callback for submitting a reply to the sender.
|
||||||
|
*/
|
||||||
|
typedef void (^FlutterMessageHandler)(id _Nullable message, FlutterReply callback);
|
||||||
|
|
||||||
|
/**
|
||||||
|
A channel for communicating with the Flutter side using basic, asynchronous
|
||||||
|
message passing.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterBasicMessageChannel : NSObject
|
||||||
|
/**
|
||||||
|
Creates a `FlutterBasicMessageChannel` with the specified name and binary
|
||||||
|
messenger.
|
||||||
|
|
||||||
|
The channel name logically identifies the channel; identically named channels
|
||||||
|
interfere with each other's communication.
|
||||||
|
|
||||||
|
The binary messenger is a facility for sending raw, binary messages to the
|
||||||
|
Flutter side. This protocol is implemented by `FlutterViewController`.
|
||||||
|
|
||||||
|
The channel uses `FlutterStandardMessageCodec` to encode and decode messages.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- name: The channel name.
|
||||||
|
- messenger: The binary messenger.
|
||||||
|
*/
|
||||||
|
+ (instancetype)messageChannelWithName:(NSString*)name
|
||||||
|
binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Creates a `FlutterBasicMessageChannel` with the specified name, binary
|
||||||
|
messenger,
|
||||||
|
and message codec.
|
||||||
|
|
||||||
|
The channel name logically identifies the channel; identically named channels
|
||||||
|
interfere with each other's communication.
|
||||||
|
|
||||||
|
The binary messenger is a facility for sending raw, binary messages to the
|
||||||
|
Flutter side. This protocol is implemented by `FlutterViewController`.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- name: The channel name.
|
||||||
|
- messenger: The binary messenger.
|
||||||
|
- codec: The message codec.
|
||||||
|
*/
|
||||||
|
+ (instancetype)messageChannelWithName:(NSString*)name
|
||||||
|
binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
|
||||||
|
codec:(NSObject<FlutterMessageCodec>*)codec;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Initializes a `FlutterBasicMessageChannel` with the specified name, binary
|
||||||
|
messenger, and message codec.
|
||||||
|
|
||||||
|
The channel name logically identifies the channel; identically named channels
|
||||||
|
interfere with each other's communication.
|
||||||
|
|
||||||
|
The binary messenger is a facility for sending raw, binary messages to the
|
||||||
|
Flutter side. This protocol is implemented by `FlutterViewController`.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- name: The channel name.
|
||||||
|
- messenger: The binary messenger.
|
||||||
|
- codec: The message codec.
|
||||||
|
*/
|
||||||
|
- (instancetype)initWithName:(NSString*)name
|
||||||
|
binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
|
||||||
|
codec:(NSObject<FlutterMessageCodec>*)codec;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sends the specified message to the Flutter side, ignoring any reply.
|
||||||
|
|
||||||
|
- Parameter message: The message. Must be supported by the codec of this
|
||||||
|
channel.
|
||||||
|
*/
|
||||||
|
- (void)sendMessage:(id _Nullable)message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sends the specified message to the Flutter side, expecting an asynchronous
|
||||||
|
reply.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- message: The message. Must be supported by the codec of this channel.
|
||||||
|
- callback: A callback to be invoked with the message reply from Flutter.
|
||||||
|
*/
|
||||||
|
- (void)sendMessage:(id _Nullable)message reply:(FlutterReply _Nullable)callback;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Registers a message handler with this channel.
|
||||||
|
|
||||||
|
Replaces any existing handler. Use a `nil` handler for unregistering the
|
||||||
|
existing handler.
|
||||||
|
|
||||||
|
- Parameter handler: The message handler.
|
||||||
|
*/
|
||||||
|
- (void)setMessageHandler:(FlutterMessageHandler _Nullable)handler;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
A method call result callback.
|
||||||
|
|
||||||
|
Used for submitting a method call result back to a Flutter caller. Also used in
|
||||||
|
the dual capacity for handling a method call result received from Flutter.
|
||||||
|
|
||||||
|
- Parameter result: The result.
|
||||||
|
*/
|
||||||
|
typedef void (^FlutterResult)(id _Nullable result);
|
||||||
|
|
||||||
|
/**
|
||||||
|
A strategy for handling method calls.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- call: The incoming method call.
|
||||||
|
- result: A callback to asynchronously submit the result of the call.
|
||||||
|
Invoke the callback with a `FlutterError` to indicate that the call failed.
|
||||||
|
Invoke the callback with `FlutterMethodNotImplemented` to indicate that the
|
||||||
|
method was unknown. Any other values, including `nil`, are interpreted as
|
||||||
|
successful results.
|
||||||
|
*/
|
||||||
|
typedef void (^FlutterMethodCallHandler)(FlutterMethodCall* call, FlutterResult result);
|
||||||
|
|
||||||
|
/**
|
||||||
|
A constant used with `FlutterMethodCallHandler` to respond to the call of an
|
||||||
|
unknown method.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
extern NSObject const* FlutterMethodNotImplemented;
|
||||||
|
|
||||||
|
/**
|
||||||
|
A channel for communicating with the Flutter side using invocation of
|
||||||
|
asynchronous methods.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterMethodChannel : NSObject
|
||||||
|
/**
|
||||||
|
Creates a `FlutterMethodChannel` with the specified name and binary messenger.
|
||||||
|
|
||||||
|
The channel name logically identifies the channel; identically named channels
|
||||||
|
interfere with each other's communication.
|
||||||
|
|
||||||
|
The binary messenger is a facility for sending raw, binary messages to the
|
||||||
|
Flutter side. This protocol is implemented by `FlutterViewController`.
|
||||||
|
|
||||||
|
The channel uses `FlutterStandardMethodCodec` to encode and decode method calls
|
||||||
|
and result envelopes.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- name: The channel name.
|
||||||
|
- messenger: The binary messenger.
|
||||||
|
*/
|
||||||
|
+ (instancetype)methodChannelWithName:(NSString*)name
|
||||||
|
binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Creates a `FlutterMethodChannel` with the specified name, binary messenger, and
|
||||||
|
method codec.
|
||||||
|
|
||||||
|
The channel name logically identifies the channel; identically named channels
|
||||||
|
interfere with each other's communication.
|
||||||
|
|
||||||
|
The binary messenger is a facility for sending raw, binary messages to the
|
||||||
|
Flutter side. This protocol is implemented by `FlutterViewController`.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- name: The channel name.
|
||||||
|
- messenger: The binary messenger.
|
||||||
|
- codec: The method codec.
|
||||||
|
*/
|
||||||
|
+ (instancetype)methodChannelWithName:(NSString*)name
|
||||||
|
binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
|
||||||
|
codec:(NSObject<FlutterMethodCodec>*)codec;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Initializes a `FlutterMethodChannel` with the specified name, binary messenger,
|
||||||
|
and method codec.
|
||||||
|
|
||||||
|
The channel name logically identifies the channel; identically named channels
|
||||||
|
interfere with each other's communication.
|
||||||
|
|
||||||
|
The binary messenger is a facility for sending raw, binary messages to the
|
||||||
|
Flutter side. This protocol is implemented by `FlutterViewController`.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- name: The channel name.
|
||||||
|
- messenger: The binary messenger.
|
||||||
|
- codec: The method codec.
|
||||||
|
*/
|
||||||
|
- (instancetype)initWithName:(NSString*)name
|
||||||
|
binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
|
||||||
|
codec:(NSObject<FlutterMethodCodec>*)codec;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Invokes the specified Flutter method with the specified arguments, expecting
|
||||||
|
no results.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- method: The name of the method to invoke.
|
||||||
|
- arguments: The arguments. Must be a value supported by the codec of this
|
||||||
|
channel.
|
||||||
|
*/
|
||||||
|
- (void)invokeMethod:(NSString*)method arguments:(id _Nullable)arguments;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Invokes the specified Flutter method with the specified arguments, expecting
|
||||||
|
an asynchronous result.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- method: The name of the method to invoke.
|
||||||
|
- arguments: The arguments. Must be a value supported by the codec of this
|
||||||
|
channel.
|
||||||
|
- result: A callback that will be invoked with the asynchronous result.
|
||||||
|
The result will be a `FlutterError` instance, if the method call resulted
|
||||||
|
in an error on the Flutter side. Will be `FlutterMethodNotImplemented`, if
|
||||||
|
the method called was not implemented on the Flutter side. Any other value,
|
||||||
|
including `nil`, should be interpreted as successful results.
|
||||||
|
*/
|
||||||
|
- (void)invokeMethod:(NSString*)method
|
||||||
|
arguments:(id _Nullable)arguments
|
||||||
|
result:(FlutterResult _Nullable)callback;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Registers a handler for method calls from the Flutter side.
|
||||||
|
|
||||||
|
Replaces any existing handler. Use a `nil` handler for unregistering the
|
||||||
|
existing handler.
|
||||||
|
|
||||||
|
- Parameter handler: The method call handler.
|
||||||
|
*/
|
||||||
|
- (void)setMethodCallHandler:(FlutterMethodCallHandler _Nullable)handler;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
An event sink callback.
|
||||||
|
|
||||||
|
- Parameter event: The event.
|
||||||
|
*/
|
||||||
|
typedef void (^FlutterEventSink)(id _Nullable event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
A strategy for exposing an event stream to the Flutter side.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@protocol FlutterStreamHandler
|
||||||
|
/**
|
||||||
|
Sets up an event stream and begin emitting events.
|
||||||
|
|
||||||
|
Invoked when the first listener is registered with the Stream associated to
|
||||||
|
this channel on the Flutter side.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- arguments: Arguments for the stream.
|
||||||
|
- events: A callback to asynchronously emit events. Invoke the
|
||||||
|
callback with a `FlutterError` to emit an error event. Invoke the
|
||||||
|
callback with `FlutterEndOfEventStream` to indicate that no more
|
||||||
|
events will be emitted. Any other value, including `nil` are emitted as
|
||||||
|
successful events.
|
||||||
|
- Returns: A FlutterError instance, if setup fails.
|
||||||
|
*/
|
||||||
|
- (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments
|
||||||
|
eventSink:(FlutterEventSink)events;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Tears down an event stream.
|
||||||
|
|
||||||
|
Invoked when the last listener is deregistered from the Stream associated to
|
||||||
|
this channel on the Flutter side.
|
||||||
|
|
||||||
|
- Parameter arguments: Arguments for the stream.
|
||||||
|
- Returns: A FlutterError instance, if teardown fails.
|
||||||
|
*/
|
||||||
|
- (FlutterError* _Nullable)onCancelWithArguments:(id _Nullable)arguments;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
A constant used with `FlutterEventChannel` to indicate end of stream.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
extern NSObject const* FlutterEndOfEventStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
A channel for communicating with the Flutter side using event streams.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterEventChannel : NSObject
|
||||||
|
/**
|
||||||
|
Creates a `FlutterEventChannel` with the specified name and binary messenger.
|
||||||
|
|
||||||
|
The channel name logically identifies the channel; identically named channels
|
||||||
|
interfere with each other's communication.
|
||||||
|
|
||||||
|
The binary messenger is a facility for sending raw, binary messages to the
|
||||||
|
Flutter side. This protocol is implemented by `FlutterViewController`.
|
||||||
|
|
||||||
|
The channel uses `FlutterStandardMethodCodec` to decode stream setup and
|
||||||
|
teardown requests, and to encode event envelopes.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- name: The channel name.
|
||||||
|
- messenger: The binary messenger.
|
||||||
|
- codec: The method codec.
|
||||||
|
*/
|
||||||
|
+ (instancetype)eventChannelWithName:(NSString*)name
|
||||||
|
binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Creates a `FlutterEventChannel` with the specified name, binary messenger,
|
||||||
|
and method codec.
|
||||||
|
|
||||||
|
The channel name logically identifies the channel; identically named channels
|
||||||
|
interfere with each other's communication.
|
||||||
|
|
||||||
|
The binary messenger is a facility for sending raw, binary messages to the
|
||||||
|
Flutter side. This protocol is implemented by `FlutterViewController`.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- name: The channel name.
|
||||||
|
- messenger: The binary messenger.
|
||||||
|
- codec: The method codec.
|
||||||
|
*/
|
||||||
|
+ (instancetype)eventChannelWithName:(NSString*)name
|
||||||
|
binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
|
||||||
|
codec:(NSObject<FlutterMethodCodec>*)codec;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Initializes a `FlutterEventChannel` with the specified name, binary messenger,
|
||||||
|
and method codec.
|
||||||
|
|
||||||
|
The channel name logically identifies the channel; identically named channels
|
||||||
|
interfere with each other's communication.
|
||||||
|
|
||||||
|
The binary messenger is a facility for sending raw, binary messages to the
|
||||||
|
Flutter side. This protocol is implemented by `FlutterViewController`.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- name: The channel name.
|
||||||
|
- messenger: The binary messenger.
|
||||||
|
- codec: The method codec.
|
||||||
|
*/
|
||||||
|
- (instancetype)initWithName:(NSString*)name
|
||||||
|
binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
|
||||||
|
codec:(NSObject<FlutterMethodCodec>*)codec;
|
||||||
|
/**
|
||||||
|
Registers a handler for stream setup requests from the Flutter side.
|
||||||
|
|
||||||
|
Replaces any existing handler. Use a `nil` handler for unregistering the
|
||||||
|
existing handler.
|
||||||
|
|
||||||
|
- Parameter handler: The stream handler.
|
||||||
|
*/
|
||||||
|
- (void)setStreamHandler:(NSObject<FlutterStreamHandler>* _Nullable)handler;
|
||||||
|
@end
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
|
|
||||||
|
#endif // FLUTTER_FLUTTERCHANNELS_H_
|
||||||
369
ios/Flutter/Flutter.framework/Headers/FlutterCodecs.h
Normal file
369
ios/Flutter/Flutter.framework/Headers/FlutterCodecs.h
Normal file
@@ -0,0 +1,369 @@
|
|||||||
|
// Copyright 2017 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef FLUTTER_FLUTTERCODECS_H_
|
||||||
|
#define FLUTTER_FLUTTERCODECS_H_
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#include "FlutterMacros.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
/**
|
||||||
|
A message encoding/decoding mechanism.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@protocol FlutterMessageCodec
|
||||||
|
/**
|
||||||
|
Returns a shared instance of this `FlutterMessageCodec`.
|
||||||
|
*/
|
||||||
|
+ (instancetype)sharedInstance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Encodes the specified message into binary.
|
||||||
|
|
||||||
|
- Parameter message: The message.
|
||||||
|
- Returns: The binary encoding, or `nil`, if `message` was `nil`.
|
||||||
|
*/
|
||||||
|
- (NSData* _Nullable)encode:(id _Nullable)message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Decodes the specified message from binary.
|
||||||
|
|
||||||
|
- Parameter message: The message.
|
||||||
|
- Returns: The decoded message, or `nil`, if `message` was `nil`.
|
||||||
|
*/
|
||||||
|
- (id _Nullable)decode:(NSData* _Nullable)message;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
A `FlutterMessageCodec` using unencoded binary messages, represented as
|
||||||
|
`NSData` instances.
|
||||||
|
|
||||||
|
This codec is guaranteed to be compatible with the corresponding
|
||||||
|
[BinaryCodec](https://docs.flutter.io/flutter/services/BinaryCodec-class.html)
|
||||||
|
on the Dart side. These parts of the Flutter SDK are evolved synchronously.
|
||||||
|
|
||||||
|
On the Dart side, messages are represented using `ByteData`.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterBinaryCodec : NSObject<FlutterMessageCodec>
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
A `FlutterMessageCodec` using UTF-8 encoded `NSString` messages.
|
||||||
|
|
||||||
|
This codec is guaranteed to be compatible with the corresponding
|
||||||
|
[StringCodec](https://docs.flutter.io/flutter/services/StringCodec-class.html)
|
||||||
|
on the Dart side. These parts of the Flutter SDK are evolved synchronously.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterStringCodec : NSObject<FlutterMessageCodec>
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
A `FlutterMessageCodec` using UTF-8 encoded JSON messages.
|
||||||
|
|
||||||
|
This codec is guaranteed to be compatible with the corresponding
|
||||||
|
[JSONMessageCodec](https://docs.flutter.io/flutter/services/JSONMessageCodec-class.html)
|
||||||
|
on the Dart side. These parts of the Flutter SDK are evolved synchronously.
|
||||||
|
|
||||||
|
Supports values accepted by `NSJSONSerialization` plus top-level
|
||||||
|
`nil`, `NSNumber`, and `NSString`.
|
||||||
|
|
||||||
|
On the Dart side, JSON messages are handled by the JSON facilities of the
|
||||||
|
[`dart:convert`](https://api.dartlang.org/stable/dart-convert/JSON-constant.html)
|
||||||
|
package.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterJSONMessageCodec : NSObject<FlutterMessageCodec>
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
A `FlutterMessageCodec` using the Flutter standard binary encoding.
|
||||||
|
|
||||||
|
This codec is guaranteed to be compatible with the corresponding
|
||||||
|
[StandardMessageCodec](https://docs.flutter.io/flutter/services/StandardMessageCodec-class.html)
|
||||||
|
on the Dart side. These parts of the Flutter SDK are evolved synchronously.
|
||||||
|
|
||||||
|
Supported messages are acyclic values of these forms:
|
||||||
|
|
||||||
|
- `nil` or `NSNull`
|
||||||
|
- `NSNumber` (including their representation of Boolean values)
|
||||||
|
- `FlutterStandardBigInteger`
|
||||||
|
- `NSString`
|
||||||
|
- `FlutterStandardTypedData`
|
||||||
|
- `NSArray` of supported values
|
||||||
|
- `NSDictionary` with supported keys and values
|
||||||
|
|
||||||
|
On the Dart side, these values are represented as follows:
|
||||||
|
|
||||||
|
- `nil` or `NSNull`: `null`
|
||||||
|
- `NSNumber`: `bool`, `int`, or `double`, depending on the contained value.
|
||||||
|
- `FlutterStandardBigInteger`: `int`
|
||||||
|
- `NSString`: `String`
|
||||||
|
- `FlutterStandardTypedData`: `Uint8List`, `Int32List`, `Int64List`, or `Float64List`
|
||||||
|
- `NSArray`: `List`
|
||||||
|
- `NSDictionary`: `Map`
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterStandardMessageCodec : NSObject<FlutterMessageCodec>
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
Command object representing a method call on a `FlutterMethodChannel`.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterMethodCall : NSObject
|
||||||
|
/**
|
||||||
|
Creates a method call for invoking the specified named method with the
|
||||||
|
specified arguments.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- method: the name of the method to call.
|
||||||
|
- arguments: the arguments value.
|
||||||
|
*/
|
||||||
|
+ (instancetype)methodCallWithMethodName:(NSString*)method arguments:(id _Nullable)arguments;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The method name.
|
||||||
|
*/
|
||||||
|
@property(readonly, nonatomic) NSString* method;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The arguments.
|
||||||
|
*/
|
||||||
|
@property(readonly, nonatomic, nullable) id arguments;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
Error object representing an unsuccessful outcome of invoking a method
|
||||||
|
on a `FlutterMethodChannel`, or an error event on a `FlutterEventChannel`.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterError : NSObject
|
||||||
|
/**
|
||||||
|
Creates a `FlutterError` with the specified error code, message, and details.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- code: An error code string for programmatic use.
|
||||||
|
- message: A human-readable error message.
|
||||||
|
- details: Custom error details.
|
||||||
|
*/
|
||||||
|
+ (instancetype)errorWithCode:(NSString*)code
|
||||||
|
message:(NSString* _Nullable)message
|
||||||
|
details:(id _Nullable)details;
|
||||||
|
/**
|
||||||
|
The error code.
|
||||||
|
*/
|
||||||
|
@property(readonly, nonatomic) NSString* code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The error message.
|
||||||
|
*/
|
||||||
|
@property(readonly, nonatomic, nullable) NSString* message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The error details.
|
||||||
|
*/
|
||||||
|
@property(readonly, nonatomic, nullable) id details;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
Type of numeric data items encoded in a `FlutterStandardDataType`.
|
||||||
|
|
||||||
|
- FlutterStandardDataTypeUInt8: plain bytes
|
||||||
|
- FlutterStandardDataTypeInt32: 32-bit signed integers
|
||||||
|
- FlutterStandardDataTypeInt64: 64-bit signed integers
|
||||||
|
- FlutterStandardDataTypeFloat64: 64-bit floats
|
||||||
|
*/
|
||||||
|
typedef NS_ENUM(NSInteger, FlutterStandardDataType) {
|
||||||
|
FlutterStandardDataTypeUInt8,
|
||||||
|
FlutterStandardDataTypeInt32,
|
||||||
|
FlutterStandardDataTypeInt64,
|
||||||
|
FlutterStandardDataTypeFloat64,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
A byte buffer holding `UInt8`, `SInt32`, `SInt64`, or `Float64` values, used
|
||||||
|
with `FlutterStandardMessageCodec` and `FlutterStandardMethodCodec`.
|
||||||
|
|
||||||
|
Two's complement encoding is used for signed integers. IEEE754
|
||||||
|
double-precision representation is used for floats. The platform's native
|
||||||
|
endianness is assumed.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterStandardTypedData : NSObject
|
||||||
|
/**
|
||||||
|
Creates a `FlutterStandardTypedData` which interprets the specified data
|
||||||
|
as plain bytes.
|
||||||
|
|
||||||
|
- Parameter data: the byte data.
|
||||||
|
*/
|
||||||
|
+ (instancetype)typedDataWithBytes:(NSData*)data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Creates a `FlutterStandardTypedData` which interprets the specified data
|
||||||
|
as 32-bit signed integers.
|
||||||
|
|
||||||
|
- Parameter data: the byte data. The length must be divisible by 4.
|
||||||
|
*/
|
||||||
|
+ (instancetype)typedDataWithInt32:(NSData*)data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Creates a `FlutterStandardTypedData` which interprets the specified data
|
||||||
|
as 64-bit signed integers.
|
||||||
|
|
||||||
|
- Parameter data: the byte data. The length must be divisible by 8.
|
||||||
|
*/
|
||||||
|
+ (instancetype)typedDataWithInt64:(NSData*)data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Creates a `FlutterStandardTypedData` which interprets the specified data
|
||||||
|
as 64-bit floats.
|
||||||
|
|
||||||
|
- Parameter data: the byte data. The length must be divisible by 8.
|
||||||
|
*/
|
||||||
|
+ (instancetype)typedDataWithFloat64:(NSData*)data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The raw underlying data buffer.
|
||||||
|
*/
|
||||||
|
@property(readonly, nonatomic) NSData* data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The type of the encoded values.
|
||||||
|
*/
|
||||||
|
@property(readonly, nonatomic) FlutterStandardDataType type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The number of value items encoded.
|
||||||
|
*/
|
||||||
|
@property(readonly, nonatomic) UInt32 elementCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The number of bytes used by the encoding of a single value item.
|
||||||
|
*/
|
||||||
|
@property(readonly, nonatomic) UInt8 elementSize;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
An arbitrarily large integer value, used with `FlutterStandardMessageCodec`
|
||||||
|
and `FlutterStandardMethodCodec`.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterStandardBigInteger : NSObject
|
||||||
|
/**
|
||||||
|
Creates a `FlutterStandardBigInteger` from a hexadecimal representation.
|
||||||
|
|
||||||
|
- Parameter hex: a hexadecimal string.
|
||||||
|
*/
|
||||||
|
+ (instancetype)bigIntegerWithHex:(NSString*)hex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The hexadecimal string representation of this integer.
|
||||||
|
*/
|
||||||
|
@property(readonly, nonatomic) NSString* hex;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
A codec for method calls and enveloped results.
|
||||||
|
|
||||||
|
Method calls are encoded as binary messages with enough structure that the
|
||||||
|
codec can extract a method name `NSString` and an arguments `NSObject`,
|
||||||
|
possibly `nil`. These data items are used to populate a `FlutterMethodCall`.
|
||||||
|
|
||||||
|
Result envelopes are encoded as binary messages with enough structure that
|
||||||
|
the codec can determine whether the result was successful or an error. In
|
||||||
|
the former case, the codec can extract the result `NSObject`, possibly `nil`.
|
||||||
|
In the latter case, the codec can extract an error code `NSString`, a
|
||||||
|
human-readable `NSString` error message (possibly `nil`), and a custom
|
||||||
|
error details `NSObject`, possibly `nil`. These data items are used to
|
||||||
|
populate a `FlutterError`.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@protocol FlutterMethodCodec
|
||||||
|
/**
|
||||||
|
Provides access to a shared instance this codec.
|
||||||
|
|
||||||
|
- Returns: The shared instance.
|
||||||
|
*/
|
||||||
|
+ (instancetype)sharedInstance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Encodes the specified method call into binary.
|
||||||
|
|
||||||
|
- Parameter methodCall: The method call. The arguments value
|
||||||
|
must be supported by this codec.
|
||||||
|
- Returns: The binary encoding.
|
||||||
|
*/
|
||||||
|
- (NSData*)encodeMethodCall:(FlutterMethodCall*)methodCall;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Decodes the specified method call from binary.
|
||||||
|
|
||||||
|
- Parameter methodCall: The method call to decode.
|
||||||
|
- Returns: The decoded method call.
|
||||||
|
*/
|
||||||
|
- (FlutterMethodCall*)decodeMethodCall:(NSData*)methodCall;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Encodes the specified successful result into binary.
|
||||||
|
|
||||||
|
- Parameter result: The result. Must be a value supported by this codec.
|
||||||
|
- Returns: The binary encoding.
|
||||||
|
*/
|
||||||
|
- (NSData*)encodeSuccessEnvelope:(id _Nullable)result;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Encodes the specified error result into binary.
|
||||||
|
|
||||||
|
- Parameter error: The error object. The error details value must be supported
|
||||||
|
by this codec.
|
||||||
|
- Returns: The binary encoding.
|
||||||
|
*/
|
||||||
|
- (NSData*)encodeErrorEnvelope:(FlutterError*)error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Deccodes the specified result envelope from binary.
|
||||||
|
|
||||||
|
- Parameter error: The error object.
|
||||||
|
- Returns: The result value, if the envelope represented a successful result,
|
||||||
|
or a `FlutterError` instance, if not.
|
||||||
|
*/
|
||||||
|
- (id _Nullable)decodeEnvelope:(NSData*)envelope;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
A `FlutterMethodCodec` using UTF-8 encoded JSON method calls and result
|
||||||
|
envelopes.
|
||||||
|
|
||||||
|
This codec is guaranteed to be compatible with the corresponding
|
||||||
|
[JSONMethodCodec](https://docs.flutter.io/flutter/services/JSONMethodCodec-class.html)
|
||||||
|
on the Dart side. These parts of the Flutter SDK are evolved synchronously.
|
||||||
|
|
||||||
|
Values supported as methods arguments and result payloads are
|
||||||
|
those supported as top-level or leaf values by `FlutterJSONMessageCodec`.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterJSONMethodCodec : NSObject<FlutterMethodCodec>
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
A `FlutterMethodCodec` using the Flutter standard binary encoding.
|
||||||
|
|
||||||
|
This codec is guaranteed to be compatible with the corresponding
|
||||||
|
[StandardMethodCodec](https://docs.flutter.io/flutter/services/StandardMethodCodec-class.html)
|
||||||
|
on the Dart side. These parts of the Flutter SDK are evolved synchronously.
|
||||||
|
|
||||||
|
Values supported as method arguments and result payloads are those supported by
|
||||||
|
`FlutterStandardMessageCodec`.
|
||||||
|
*/
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterStandardMethodCodec : NSObject<FlutterMethodCodec>
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
|
|
||||||
|
#endif // FLUTTER_FLUTTERCODECS_H_
|
||||||
27
ios/Flutter/Flutter.framework/Headers/FlutterDartProject.h
Normal file
27
ios/Flutter/Flutter.framework/Headers/FlutterDartProject.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
// Copyright 2016 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef FLUTTER_FLUTTERDARTPROJECT_H_
|
||||||
|
#define FLUTTER_FLUTTERDARTPROJECT_H_
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#include "FlutterMacros.h"
|
||||||
|
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterDartProject : NSObject
|
||||||
|
|
||||||
|
- (instancetype)initWithPrecompiledDartBundle:(NSBundle*)bundle NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
|
- (instancetype)initWithFLXArchive:(NSURL*)archiveURL
|
||||||
|
dartMain:(NSURL*)dartMainURL
|
||||||
|
packages:(NSURL*)dartPackages NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
|
- (instancetype)initWithFLXArchiveWithScriptSnapshot:(NSURL*)archiveURL NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
|
- (instancetype)initFromDefaultSourceForConfiguration;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif // FLUTTER_FLUTTERDARTPROJECT_H_
|
||||||
23
ios/Flutter/Flutter.framework/Headers/FlutterMacros.h
Normal file
23
ios/Flutter/Flutter.framework/Headers/FlutterMacros.h
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
// Copyright 2016 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef FLUTTER_FLUTTERMACROS_H_
|
||||||
|
#define FLUTTER_FLUTTERMACROS_H_
|
||||||
|
|
||||||
|
#if defined(FLUTTER_FRAMEWORK)
|
||||||
|
|
||||||
|
#define FLUTTER_EXPORT __attribute__((visibility("default")))
|
||||||
|
|
||||||
|
#else // defined(FLUTTER_SDK)
|
||||||
|
|
||||||
|
#define FLUTTER_EXPORT
|
||||||
|
|
||||||
|
#endif // defined(FLUTTER_SDK)
|
||||||
|
|
||||||
|
#ifndef NS_ASSUME_NONNULL_BEGIN
|
||||||
|
#define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin")
|
||||||
|
#define NS_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end")
|
||||||
|
#endif // defined(NS_ASSUME_NONNULL_BEGIN)
|
||||||
|
|
||||||
|
#endif // FLUTTER_FLUTTERMACROS_H_
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// Copyright 2017 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface FlutterNavigationController : UINavigationController
|
||||||
|
|
||||||
|
@end
|
||||||
212
ios/Flutter/Flutter.framework/Headers/FlutterPlugin.h
Normal file
212
ios/Flutter/Flutter.framework/Headers/FlutterPlugin.h
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
// Copyright 2017 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef FLUTTER_FLUTTERPLUGIN_H_
|
||||||
|
#define FLUTTER_FLUTTERPLUGIN_H_
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#include "FlutterBinaryMessenger.h"
|
||||||
|
#include "FlutterChannels.h"
|
||||||
|
#include "FlutterCodecs.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
@protocol FlutterPluginRegistrar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Implemented by the iOS part of a Flutter plugin.
|
||||||
|
|
||||||
|
Defines a set of optional callback methods and a method to set up the plugin
|
||||||
|
and register it to be called by other application components.
|
||||||
|
*/
|
||||||
|
@protocol FlutterPlugin<NSObject>
|
||||||
|
@required
|
||||||
|
/**
|
||||||
|
Registers this plugin.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- registrar: A helper providing application context and methods for
|
||||||
|
registering callbacks
|
||||||
|
*/
|
||||||
|
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar;
|
||||||
|
@optional
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered to receive `FlutterMethodCall`s.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- call: The method call command object.
|
||||||
|
- result: A callback for submitting the result of the call.
|
||||||
|
*/
|
||||||
|
- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
|
||||||
|
- Returns: `NO` if this plugin vetoes application launch.
|
||||||
|
*/
|
||||||
|
- (BOOL)application:(UIApplication*)application
|
||||||
|
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
*/
|
||||||
|
- (void)applicationDidBecomeActive:(UIApplication*)application;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
*/
|
||||||
|
- (void)applicationWillResignActive:(UIApplication*)application;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
*/
|
||||||
|
- (void)applicationDidEnterBackground:(UIApplication*)application;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
*/
|
||||||
|
- (void)applicationWillEnterForeground:(UIApplication*)application;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
*/
|
||||||
|
- (void)applicationWillTerminate:(UIApplication*)application;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
*/
|
||||||
|
- (void)application:(UIApplication*)application
|
||||||
|
didRegisterUserNotificationSettings:(UIUserNotificationSettings*)notificationSettings;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
*/
|
||||||
|
- (void)application:(UIApplication*)application
|
||||||
|
didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
|
||||||
|
- Returns: `YES` if this plugin handles the request.
|
||||||
|
*/
|
||||||
|
- (BOOL)application:(UIApplication*)application
|
||||||
|
didReceiveRemoteNotification:(NSDictionary*)userInfo
|
||||||
|
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
|
||||||
|
- Returns: `YES` if this plugin handles the request.
|
||||||
|
*/
|
||||||
|
- (BOOL)application:(UIApplication*)application
|
||||||
|
openURL:(NSURL*)url
|
||||||
|
options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
|
||||||
|
- Returns: `YES` if this plugin handles the request.
|
||||||
|
*/
|
||||||
|
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
|
||||||
|
- Returns: `YES` if this plugin handles the request.
|
||||||
|
*/
|
||||||
|
- (BOOL)application:(UIApplication*)application
|
||||||
|
openURL:(NSURL*)url
|
||||||
|
sourceApplication:(NSString*)sourceApplication
|
||||||
|
annotation:(id)annotation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
|
||||||
|
|
||||||
|
- Returns: `YES` if this plugin handles the request.
|
||||||
|
*/
|
||||||
|
- (BOOL)application:(UIApplication*)application
|
||||||
|
performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem
|
||||||
|
completionHandler:(void (^)(BOOL succeeded))completionHandler;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
Registration context for a single `FlutterPlugin`.
|
||||||
|
*/
|
||||||
|
@protocol FlutterPluginRegistrar<NSObject>
|
||||||
|
/**
|
||||||
|
Returns a `FlutterBinaryMessenger` for creating Dart/iOS communication
|
||||||
|
channels to be used by the plugin.
|
||||||
|
|
||||||
|
- Returns: The messenger.
|
||||||
|
*/
|
||||||
|
- (NSObject<FlutterBinaryMessenger>*)messenger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Publishes a value for external use of the plugin.
|
||||||
|
|
||||||
|
Plugins may publish a single value, such as an instance of the
|
||||||
|
plugin's main class, for situations where external control or
|
||||||
|
interaction is needed.
|
||||||
|
|
||||||
|
The published value will be available from the `FlutterPluginRegistry`.
|
||||||
|
Repeated calls overwrite any previous publication.
|
||||||
|
|
||||||
|
- Parameter value: The value to be published.
|
||||||
|
*/
|
||||||
|
- (void)publish:(NSObject*)value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Registers the plugin as a receiver of incoming method calls from the Dart side
|
||||||
|
on the specified `FlutterMethodChannel`.
|
||||||
|
|
||||||
|
- Parameters:
|
||||||
|
- delegate: The receiving object, such as the plugin's main class.
|
||||||
|
- channel: The channel
|
||||||
|
*/
|
||||||
|
- (void)addMethodCallDelegate:(NSObject<FlutterPlugin>*)delegate
|
||||||
|
channel:(FlutterMethodChannel*)channel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Registers the plugin as a receiver of `UIApplicationDelegate` calls.
|
||||||
|
|
||||||
|
- Parameters delegate: The receiving object, such as the plugin's main class.
|
||||||
|
*/
|
||||||
|
- (void)addApplicationDelegate:(NSObject<FlutterPlugin>*)delegate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/**
|
||||||
|
A registry of Flutter iOS plugins.
|
||||||
|
|
||||||
|
Plugins are identified by unique string keys, typically the name of the
|
||||||
|
plugin's main class.
|
||||||
|
*/
|
||||||
|
@protocol FlutterPluginRegistry<NSObject>
|
||||||
|
/**
|
||||||
|
Returns a registrar for registering a plugin.
|
||||||
|
|
||||||
|
- Parameter pluginKey: The unique key identifying the plugin.
|
||||||
|
*/
|
||||||
|
- (NSObject<FlutterPluginRegistrar>*)registrarForPlugin:(NSString*)pluginKey;
|
||||||
|
/**
|
||||||
|
Returns whether the specified plugin has been registered.
|
||||||
|
|
||||||
|
- Parameter pluginKey: The unique key identifying the plugin.
|
||||||
|
- Returns: `YES` if `registrarForPlugin` has been called with `pluginKey`.
|
||||||
|
*/
|
||||||
|
- (BOOL)hasPlugin:(NSString*)pluginKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns a value published by the specified plugin.
|
||||||
|
|
||||||
|
- Parameter pluginKey: The unique key identifying the plugin.
|
||||||
|
- Returns: An object published by the plugin, if any. Will be `NSNull` if
|
||||||
|
nothing has been published. Will be `nil` if the plugin has not been
|
||||||
|
registered.
|
||||||
|
*/
|
||||||
|
- (NSObject*)valuePublishedByPlugin:(NSString*)pluginKey;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END;
|
||||||
|
|
||||||
|
#endif // FLUTTER_FLUTTERPLUGIN_H_
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
// Copyright 2016 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef FLUTTER_FLUTTERVIEWCONTROLLER_H_
|
||||||
|
#define FLUTTER_FLUTTERVIEWCONTROLLER_H_
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#include "FlutterBinaryMessenger.h"
|
||||||
|
#include "FlutterDartProject.h"
|
||||||
|
#include "FlutterMacros.h"
|
||||||
|
|
||||||
|
FLUTTER_EXPORT
|
||||||
|
@interface FlutterViewController : UIViewController<FlutterBinaryMessenger>
|
||||||
|
|
||||||
|
- (instancetype)initWithProject:(FlutterDartProject*)project
|
||||||
|
nibName:(NSString*)nibNameOrNil
|
||||||
|
bundle:(NSBundle*)nibBundleOrNil NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
|
- (void)handleStatusBarTouches:(UIEvent*)event;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sets the first route that the Flutter app shows. The default is "/".
|
||||||
|
|
||||||
|
- Parameter route: The name of the first route to show.
|
||||||
|
*/
|
||||||
|
- (void)setInitialRoute:(NSString*)route;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif // FLUTTER_FLUTTERVIEWCONTROLLER_H_
|
||||||
30
ios/Flutter/Flutter.framework/Info.plist
Normal file
30
ios/Flutter/Flutter.framework/Info.plist
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>Flutter</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>io.flutter.flutter</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>Flutter</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
<array>
|
||||||
|
<string>arm64</string>
|
||||||
|
</array>
|
||||||
|
<key>MinimumOSVersion</key>
|
||||||
|
<string>8.0</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
6
ios/Flutter/Flutter.framework/Modules/module.modulemap
Normal file
6
ios/Flutter/Flutter.framework/Modules/module.modulemap
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
framework module Flutter {
|
||||||
|
umbrella header "Flutter.h"
|
||||||
|
|
||||||
|
export *
|
||||||
|
module * { export * }
|
||||||
|
}
|
||||||
BIN
ios/Flutter/Flutter.framework/icudtl.dat
Normal file
BIN
ios/Flutter/Flutter.framework/icudtl.dat
Normal file
Binary file not shown.
9
ios/Flutter/Generated.xcconfig
Normal file
9
ios/Flutter/Generated.xcconfig
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
// This is a generated file; do not edit or check into version control.
|
||||||
|
FLUTTER_ROOT=/Users/ntrlab/flutter
|
||||||
|
FLUTTER_APPLICATION_PATH=/Users/ntrlab/semyon/apps/checker
|
||||||
|
FLUTTER_TARGET=/Users/ntrlab/semyon/apps/checker/lib/main.dart
|
||||||
|
FLUTTER_BUILD_MODE=debug
|
||||||
|
FLUTTER_BUILD_DIR=build
|
||||||
|
SYMROOT=${SOURCE_ROOT}/../build/ios
|
||||||
|
FLUTTER_FRAMEWORK_DIR=/Users/ntrlab/flutter/bin/cache/artifacts/engine/ios
|
||||||
|
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
||||||
BIN
ios/Flutter/app.flx
Normal file
BIN
ios/Flutter/app.flx
Normal file
Binary file not shown.
@@ -1,8 +1,8 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
- FMDB (2.7.2):
|
- FMDB (2.6.2):
|
||||||
- FMDB/standard (= 2.7.2)
|
- FMDB/standard (= 2.6.2)
|
||||||
- FMDB/standard (2.7.2)
|
- FMDB/standard (2.6.2)
|
||||||
- path_provider (0.0.1):
|
- path_provider (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- sqflite (0.0.1):
|
- sqflite (0.0.1):
|
||||||
@@ -10,24 +10,24 @@ PODS:
|
|||||||
- FMDB
|
- FMDB
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- Flutter (from `/Users/kifio/flutter/bin/cache/artifacts/engine/ios`)
|
- Flutter (from `/Users/ntrlab/flutter/bin/cache/artifacts/engine/ios`)
|
||||||
- path_provider (from `/Users/kifio/.pub-cache/hosted/pub.dartlang.org/path_provider-0.2.1+1/ios`)
|
- path_provider (from `/Users/ntrlab/.pub-cache/hosted/pub.dartlang.org/path_provider-0.2.1+1/ios`)
|
||||||
- sqflite (from `/Users/kifio/.pub-cache/hosted/pub.dartlang.org/sqflite-0.2.2/ios`)
|
- sqflite (from `/Users/ntrlab/.pub-cache/hosted/pub.dartlang.org/sqflite-0.2.3/ios`)
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
Flutter:
|
Flutter:
|
||||||
:path: /Users/kifio/flutter/bin/cache/artifacts/engine/ios
|
:path: /Users/ntrlab/flutter/bin/cache/artifacts/engine/ios
|
||||||
path_provider:
|
path_provider:
|
||||||
:path: /Users/kifio/.pub-cache/hosted/pub.dartlang.org/path_provider-0.2.1+1/ios
|
:path: /Users/ntrlab/.pub-cache/hosted/pub.dartlang.org/path_provider-0.2.1+1/ios
|
||||||
sqflite:
|
sqflite:
|
||||||
:path: /Users/kifio/.pub-cache/hosted/pub.dartlang.org/sqflite-0.2.2/ios
|
:path: /Users/ntrlab/.pub-cache/hosted/pub.dartlang.org/sqflite-0.2.3/ios
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
Flutter: d674e78c937094a75ac71dd77e921e840bea3dbf
|
Flutter: d674e78c937094a75ac71dd77e921e840bea3dbf
|
||||||
FMDB: 6198a90e7b6900cfc046e6bc0ef6ebb7be9236aa
|
FMDB: 854a0341b4726e53276f2a8996f06f1b80f9259a
|
||||||
path_provider: f96fff6166a8867510d2c25fdcc346327cc4b259
|
path_provider: f96fff6166a8867510d2c25fdcc346327cc4b259
|
||||||
sqflite: 8e2d9fe1e7cdc95d4d537fc7eb2d23c8dc428e3c
|
sqflite: 8e2d9fe1e7cdc95d4d537fc7eb2d23c8dc428e3c
|
||||||
|
|
||||||
PODFILE CHECKSUM: 351e02e34b831289961ec3558a535cbd2c4965d2
|
PODFILE CHECKSUM: 351e02e34b831289961ec3558a535cbd2c4965d2
|
||||||
|
|
||||||
COCOAPODS: 1.2.0
|
COCOAPODS: 1.2.1
|
||||||
|
|||||||
28
ios/Pods/FMDB/LICENSE.txt
generated
Normal file
28
ios/Pods/FMDB/LICENSE.txt
generated
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
If you are using FMDB in your project, I'd love to hear about it. Let Gus know
|
||||||
|
by sending an email to gus@flyingmeat.com.
|
||||||
|
|
||||||
|
And if you happen to come across either Gus Mueller or Rob Ryan in a bar, you
|
||||||
|
might consider purchasing a drink of their choosing if FMDB has been useful to
|
||||||
|
you.
|
||||||
|
|
||||||
|
Finally, and shortly, this is the MIT License.
|
||||||
|
|
||||||
|
Copyright (c) 2008-2014 Flying Meat Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
397
ios/Pods/FMDB/README.markdown
generated
Normal file
397
ios/Pods/FMDB/README.markdown
generated
Normal file
@@ -0,0 +1,397 @@
|
|||||||
|
# FMDB v2.6.2
|
||||||
|
|
||||||
|
This is an Objective-C wrapper around SQLite: http://sqlite.org/
|
||||||
|
|
||||||
|
## The FMDB Mailing List:
|
||||||
|
http://groups.google.com/group/fmdb
|
||||||
|
|
||||||
|
## Read the SQLite FAQ:
|
||||||
|
http://www.sqlite.org/faq.html
|
||||||
|
|
||||||
|
Since FMDB is built on top of SQLite, you're going to want to read this page top to bottom at least once. And while you're there, make sure to bookmark the SQLite Documentation page: http://www.sqlite.org/docs.html
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
Do you have an awesome idea that deserves to be in FMDB? You might consider pinging ccgus first to make sure he hasn't already ruled it out for some reason. Otherwise pull requests are great, and make sure you stick to the local coding conventions. However, please be patient and if you haven't heard anything from ccgus for a week or more, you might want to send a note asking what's up.
|
||||||
|
|
||||||
|
## CocoaPods
|
||||||
|
|
||||||
|
[](https://www.versioneye.com/objective-c/fmdb/2.3)
|
||||||
|
[](https://www.versioneye.com/objective-c/fmdb/references)
|
||||||
|
|
||||||
|
FMDB can be installed using [CocoaPods](https://cocoapods.org/).
|
||||||
|
|
||||||
|
```
|
||||||
|
pod 'FMDB'
|
||||||
|
# pod 'FMDB/FTS' # FMDB with FTS
|
||||||
|
# pod 'FMDB/standalone' # FMDB with latest SQLite amalgamation source
|
||||||
|
# pod 'FMDB/standalone/FTS' # FMDB with latest SQLite amalgamation source and FTS
|
||||||
|
# pod 'FMDB/SQLCipher' # FMDB with SQLCipher
|
||||||
|
```
|
||||||
|
|
||||||
|
**If using FMDB with [SQLCipher](https://www.zetetic.net/sqlcipher/) you must use the FMDB/SQLCipher subspec. The FMDB/SQLCipher subspec declares SQLCipher as a dependency, allowing FMDB to be compiled with the `-DSQLITE_HAS_CODEC` flag.**
|
||||||
|
|
||||||
|
## FMDB Class Reference:
|
||||||
|
http://ccgus.github.io/fmdb/html/index.html
|
||||||
|
|
||||||
|
## Automatic Reference Counting (ARC) or Manual Memory Management?
|
||||||
|
You can use either style in your Cocoa project. FMDB will figure out which you are using at compile time and do the right thing.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
There are three main classes in FMDB:
|
||||||
|
|
||||||
|
1. `FMDatabase` - Represents a single SQLite database. Used for executing SQL statements.
|
||||||
|
2. `FMResultSet` - Represents the results of executing a query on an `FMDatabase`.
|
||||||
|
3. `FMDatabaseQueue` - If you're wanting to perform queries and updates on multiple threads, you'll want to use this class. It's described in the "Thread Safety" section below.
|
||||||
|
|
||||||
|
### Database Creation
|
||||||
|
An `FMDatabase` is created with a path to a SQLite database file. This path can be one of these three:
|
||||||
|
|
||||||
|
1. A file system path. The file does not have to exist on disk. If it does not exist, it is created for you.
|
||||||
|
2. An empty string (`@""`). An empty database is created at a temporary location. This database is deleted with the `FMDatabase` connection is closed.
|
||||||
|
3. `NULL`. An in-memory database is created. This database will be destroyed with the `FMDatabase` connection is closed.
|
||||||
|
|
||||||
|
(For more information on temporary and in-memory databases, read the sqlite documentation on the subject: http://www.sqlite.org/inmemorydb.html)
|
||||||
|
|
||||||
|
```objc
|
||||||
|
FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"];
|
||||||
|
```
|
||||||
|
|
||||||
|
### Opening
|
||||||
|
|
||||||
|
Before you can interact with the database, it must be opened. Opening fails if there are insufficient resources or permissions to open and/or create the database.
|
||||||
|
|
||||||
|
```objc
|
||||||
|
if (![db open]) {
|
||||||
|
[db release];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Executing Updates
|
||||||
|
|
||||||
|
Any sort of SQL statement which is not a `SELECT` statement qualifies as an update. This includes `CREATE`, `UPDATE`, `INSERT`, `ALTER`, `COMMIT`, `BEGIN`, `DETACH`, `DELETE`, `DROP`, `END`, `EXPLAIN`, `VACUUM`, and `REPLACE` statements (plus many more). Basically, if your SQL statement does not begin with `SELECT`, it is an update statement.
|
||||||
|
|
||||||
|
Executing updates returns a single value, a `BOOL`. A return value of `YES` means the update was successfully executed, and a return value of `NO` means that some error was encountered. You may invoke the `-lastErrorMessage` and `-lastErrorCode` methods to retrieve more information.
|
||||||
|
|
||||||
|
### Executing Queries
|
||||||
|
|
||||||
|
A `SELECT` statement is a query and is executed via one of the `-executeQuery...` methods.
|
||||||
|
|
||||||
|
Executing queries returns an `FMResultSet` object if successful, and `nil` upon failure. You should use the `-lastErrorMessage` and `-lastErrorCode` methods to determine why a query failed.
|
||||||
|
|
||||||
|
In order to iterate through the results of your query, you use a `while()` loop. You also need to "step" from one record to the other. With FMDB, the easiest way to do that is like this:
|
||||||
|
|
||||||
|
```objc
|
||||||
|
FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"];
|
||||||
|
while ([s next]) {
|
||||||
|
//retrieve values for each record
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You must always invoke `-[FMResultSet next]` before attempting to access the values returned in a query, even if you're only expecting one:
|
||||||
|
|
||||||
|
```objc
|
||||||
|
FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"];
|
||||||
|
if ([s next]) {
|
||||||
|
int totalCount = [s intForColumnIndex:0];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`FMResultSet` has many methods to retrieve data in an appropriate format:
|
||||||
|
|
||||||
|
- `intForColumn:`
|
||||||
|
- `longForColumn:`
|
||||||
|
- `longLongIntForColumn:`
|
||||||
|
- `boolForColumn:`
|
||||||
|
- `doubleForColumn:`
|
||||||
|
- `stringForColumn:`
|
||||||
|
- `dateForColumn:`
|
||||||
|
- `dataForColumn:`
|
||||||
|
- `dataNoCopyForColumn:`
|
||||||
|
- `UTF8StringForColumnName:`
|
||||||
|
- `objectForColumnName:`
|
||||||
|
|
||||||
|
Each of these methods also has a `{type}ForColumnIndex:` variant that is used to retrieve the data based on the position of the column in the results, as opposed to the column's name.
|
||||||
|
|
||||||
|
Typically, there's no need to `-close` an `FMResultSet` yourself, since that happens when either the result set is deallocated, or the parent database is closed.
|
||||||
|
|
||||||
|
### Closing
|
||||||
|
|
||||||
|
When you have finished executing queries and updates on the database, you should `-close` the `FMDatabase` connection so that SQLite will relinquish any resources it has acquired during the course of its operation.
|
||||||
|
|
||||||
|
```objc
|
||||||
|
[db close];
|
||||||
|
```
|
||||||
|
|
||||||
|
### Transactions
|
||||||
|
|
||||||
|
`FMDatabase` can begin and commit a transaction by invoking one of the appropriate methods or executing a begin/end transaction statement.
|
||||||
|
|
||||||
|
### Multiple Statements and Batch Stuff
|
||||||
|
|
||||||
|
You can use `FMDatabase`'s executeStatements:withResultBlock: to do multiple statements in a string:
|
||||||
|
|
||||||
|
```objc
|
||||||
|
NSString *sql = @"create table bulktest1 (id integer primary key autoincrement, x text);"
|
||||||
|
"create table bulktest2 (id integer primary key autoincrement, y text);"
|
||||||
|
"create table bulktest3 (id integer primary key autoincrement, z text);"
|
||||||
|
"insert into bulktest1 (x) values ('XXX');"
|
||||||
|
"insert into bulktest2 (y) values ('YYY');"
|
||||||
|
"insert into bulktest3 (z) values ('ZZZ');";
|
||||||
|
|
||||||
|
success = [db executeStatements:sql];
|
||||||
|
|
||||||
|
sql = @"select count(*) as count from bulktest1;"
|
||||||
|
"select count(*) as count from bulktest2;"
|
||||||
|
"select count(*) as count from bulktest3;";
|
||||||
|
|
||||||
|
success = [self.db executeStatements:sql withResultBlock:^int(NSDictionary *dictionary) {
|
||||||
|
NSInteger count = [dictionary[@"count"] integerValue];
|
||||||
|
XCTAssertEqual(count, 1, @"expected one record for dictionary %@", dictionary);
|
||||||
|
return 0;
|
||||||
|
}];
|
||||||
|
```
|
||||||
|
|
||||||
|
### Data Sanitization
|
||||||
|
|
||||||
|
When providing a SQL statement to FMDB, you should not attempt to "sanitize" any values before insertion. Instead, you should use the standard SQLite binding syntax:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
INSERT INTO myTable VALUES (?, ?, ?, ?)
|
||||||
|
```
|
||||||
|
|
||||||
|
The `?` character is recognized by SQLite as a placeholder for a value to be inserted. The execution methods all accept a variable number of arguments (or a representation of those arguments, such as an `NSArray`, `NSDictionary`, or a `va_list`), which are properly escaped for you.
|
||||||
|
|
||||||
|
And, to use that SQL with the `?` placeholders from Objective-C:
|
||||||
|
|
||||||
|
```objc
|
||||||
|
NSInteger identifier = 42;
|
||||||
|
NSString *name = @"Liam O'Flaherty (\"the famous Irish author\")";
|
||||||
|
NSDate *date = [NSDate date];
|
||||||
|
NSString *comment = nil;
|
||||||
|
|
||||||
|
BOOL success = [db executeUpdate:@"INSERT INTO authors (identifier, name, date, comment) VALUES (?, ?, ?, ?)", @(identifier), name, date, comment ?: [NSNull null]];
|
||||||
|
if (!success) {
|
||||||
|
NSLog(@"error = %@", [db lastErrorMessage]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Note:** Fundamental data types, like the `NSInteger` variable `identifier`, should be as a `NSNumber` objects, achieved by using the `@` syntax, shown above. Or you can use the `[NSNumber numberWithInt:identifier]` syntax, too.
|
||||||
|
>
|
||||||
|
> Likewise, SQL `NULL` values should be inserted as `[NSNull null]`. For example, in the case of `comment` which might be `nil` (and is in this example), you can use the `comment ?: [NSNull null]` syntax, which will insert the string if `comment` is not `nil`, but will insert `[NSNull null]` if it is `nil`.
|
||||||
|
|
||||||
|
In Swift, you would use `executeUpdate(values:)`, which not only is a concise Swift syntax, but also `throws` errors for proper Swift 2 error handling:
|
||||||
|
|
||||||
|
```swift
|
||||||
|
do {
|
||||||
|
let identifier = 42
|
||||||
|
let name = "Liam O'Flaherty (\"the famous Irish author\")"
|
||||||
|
let date = NSDate()
|
||||||
|
let comment: String? = nil
|
||||||
|
|
||||||
|
try db.executeUpdate("INSERT INTO authors (identifier, name, date, comment) VALUES (?, ?, ?, ?)", values: [identifier, name, date, comment ?? NSNull()])
|
||||||
|
} catch {
|
||||||
|
print("error = \(error)")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Note:** In Swift, you don't have to wrap fundamental numeric types like you do in Objective-C. But if you are going to insert an optional string, you would probably use the `comment ?? NSNull()` syntax (i.e., if it is `nil`, use `NSNull`, otherwise use the string).
|
||||||
|
|
||||||
|
Alternatively, you may use named parameters syntax:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
INSERT INTO authors (identifier, name, date, comment) VALUES (:identifier, :name, :date, :comment)
|
||||||
|
```
|
||||||
|
|
||||||
|
The parameters *must* start with a colon. SQLite itself supports other characters, but internally the dictionary keys are prefixed with a colon, do **not** include the colon in your dictionary keys.
|
||||||
|
|
||||||
|
```objc
|
||||||
|
NSDictionary *arguments = @{@"identifier": @(identifier), @"name": name, @"date": date, @"comment": comment ?: [NSNull null]};
|
||||||
|
BOOL success = [db executeUpdate:@"INSERT INTO authors (identifier, name, date, comment) VALUES (:identifier, :name, :date, :comment)" withParameterDictionary:arguments];
|
||||||
|
if (!success) {
|
||||||
|
NSLog(@"error = %@", [db lastErrorMessage]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The key point is that one should not use `NSString` method `stringWithFormat` to manually insert values into the SQL statement, itself. Nor should one Swift string interpolation to insert values into the SQL. Use `?` placeholders for values to be inserted into the database (or used in `WHERE` clauses in `SELECT` statements).
|
||||||
|
|
||||||
|
<h2 id="threads">Using FMDatabaseQueue and Thread Safety.</h2>
|
||||||
|
|
||||||
|
Using a single instance of `FMDatabase` from multiple threads at once is a bad idea. It has always been OK to make a `FMDatabase` object *per thread*. Just don't share a single instance across threads, and definitely not across multiple threads at the same time. Bad things will eventually happen and you'll eventually get something to crash, or maybe get an exception, or maybe meteorites will fall out of the sky and hit your Mac Pro. *This would suck*.
|
||||||
|
|
||||||
|
**So don't instantiate a single `FMDatabase` object and use it across multiple threads.**
|
||||||
|
|
||||||
|
Instead, use `FMDatabaseQueue`. Instantiate a single `FMDatabaseQueue` and use it across multiple threads. The `FMDatabaseQueue` object will synchronize and coordinate access across the multiple threads. Here's how to use it:
|
||||||
|
|
||||||
|
First, make your queue.
|
||||||
|
|
||||||
|
```objc
|
||||||
|
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
|
||||||
|
```
|
||||||
|
|
||||||
|
Then use it like so:
|
||||||
|
|
||||||
|
|
||||||
|
```objc
|
||||||
|
[queue inDatabase:^(FMDatabase *db) {
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];
|
||||||
|
|
||||||
|
FMResultSet *rs = [db executeQuery:@"select * from foo"];
|
||||||
|
while ([rs next]) {
|
||||||
|
…
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
```
|
||||||
|
|
||||||
|
An easy way to wrap things up in a transaction can be done like this:
|
||||||
|
|
||||||
|
```objc
|
||||||
|
[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", @1];
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", @2];
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", @3];
|
||||||
|
|
||||||
|
if (whoopsSomethingWrongHappened) {
|
||||||
|
*rollback = YES;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// etc…
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", @4];
|
||||||
|
}];
|
||||||
|
```
|
||||||
|
|
||||||
|
The Swift equivalent would be:
|
||||||
|
|
||||||
|
```swift
|
||||||
|
queue.inTransaction { db, rollback in
|
||||||
|
do {
|
||||||
|
try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [1])
|
||||||
|
try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [2])
|
||||||
|
try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [3])
|
||||||
|
|
||||||
|
if whoopsSomethingWrongHappened {
|
||||||
|
rollback.memory = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try db.executeUpdate("INSERT INTO myTable VALUES (?)", values: [4])
|
||||||
|
} catch {
|
||||||
|
rollback.memory = true
|
||||||
|
print(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`FMDatabaseQueue` will run the blocks on a serialized queue (hence the name of the class). So if you call `FMDatabaseQueue`'s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won't step on each other's toes, and every one is happy.
|
||||||
|
|
||||||
|
**Note:** The calls to `FMDatabaseQueue`'s methods are blocking. So even though you are passing along blocks, they will **not** be run on another thread.
|
||||||
|
|
||||||
|
## Making custom sqlite functions, based on blocks.
|
||||||
|
|
||||||
|
You can do this! For an example, look for `-makeFunctionNamed:` in main.m
|
||||||
|
|
||||||
|
## Swift
|
||||||
|
|
||||||
|
You can use FMDB in Swift projects too.
|
||||||
|
|
||||||
|
To do this, you must:
|
||||||
|
|
||||||
|
1. Copy the relevant `.m` and `.h` files from the FMDB `src` folder into your project.
|
||||||
|
|
||||||
|
You can copy all of them (which is easiest), or only the ones you need. Likely you will need [`FMDatabase`](http://ccgus.github.io/fmdb/html/Classes/FMDatabase.html) and [`FMResultSet`](http://ccgus.github.io/fmdb/html/Classes/FMResultSet.html) at a minimum. [`FMDatabaseAdditions`](http://ccgus.github.io/fmdb/html/Categories/FMDatabase+FMDatabaseAdditions.html) provides some very useful convenience methods, so you will likely want that, too. If you are doing multithreaded access to a database, [`FMDatabaseQueue`](http://ccgus.github.io/fmdb/html/Classes/FMDatabaseQueue.html) is quite useful, too. If you choose to not copy all of the files from the `src` directory, though, you may want to update `FMDB.h` to only reference the files that you included in your project.
|
||||||
|
|
||||||
|
Note, if you're copying all of the files from the `src` folder into to your project (which is recommended), you may want to drag the individual files into your project, not the folder, itself, because if you drag the folder, you won't be prompted to add the bridging header (see next point).
|
||||||
|
|
||||||
|
2. If prompted to create a "bridging header", you should do so. If not prompted and if you don't already have a bridging header, add one.
|
||||||
|
|
||||||
|
For more information on bridging headers, see [Swift and Objective-C in the Same Project](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_76).
|
||||||
|
|
||||||
|
3. In your bridging header, add a line that says:
|
||||||
|
```objc
|
||||||
|
#import "FMDB.h"
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Use the variations of `executeQuery` and `executeUpdate` with the `sql` and `values` parameters with `try` pattern, as shown below. These renditions of `executeQuery` and `executeUpdate` both `throw` errors in true Swift 2 fashion.
|
||||||
|
|
||||||
|
If you do the above, you can then write Swift code that uses `FMDatabase`. For example:
|
||||||
|
|
||||||
|
```swift
|
||||||
|
let documents = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
|
||||||
|
let fileURL = documents.URLByAppendingPathComponent("test.sqlite")
|
||||||
|
|
||||||
|
let database = FMDatabase(path: fileURL.path)
|
||||||
|
|
||||||
|
if !database.open() {
|
||||||
|
print("Unable to open database")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
try database.executeUpdate("create table test(x text, y text, z text)", values: nil)
|
||||||
|
try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["a", "b", "c"])
|
||||||
|
try database.executeUpdate("insert into test (x, y, z) values (?, ?, ?)", values: ["e", "f", "g"])
|
||||||
|
|
||||||
|
let rs = try database.executeQuery("select x, y, z from test", values: nil)
|
||||||
|
while rs.next() {
|
||||||
|
let x = rs.stringForColumn("x")
|
||||||
|
let y = rs.stringForColumn("y")
|
||||||
|
let z = rs.stringForColumn("z")
|
||||||
|
print("x = \(x); y = \(y); z = \(z)")
|
||||||
|
}
|
||||||
|
} catch let error as NSError {
|
||||||
|
print("failed: \(error.localizedDescription)")
|
||||||
|
}
|
||||||
|
|
||||||
|
database.close()
|
||||||
|
```
|
||||||
|
|
||||||
|
## History
|
||||||
|
|
||||||
|
The history and changes are availbe on its [GitHub page](https://github.com/ccgus/fmdb) and are summarized in the "CHANGES_AND_TODO_LIST.txt" file.
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
The contributors to FMDB are contained in the "Contributors.txt" file.
|
||||||
|
|
||||||
|
## Additional projects using FMDB, which might be interesting to the discerning developer.
|
||||||
|
|
||||||
|
* FMDBMigrationManager, A SQLite schema migration management system for FMDB: https://github.com/layerhq/FMDBMigrationManager
|
||||||
|
* FCModel, An alternative to Core Data for people who like having direct SQL access: https://github.com/marcoarment/FCModel
|
||||||
|
|
||||||
|
## Quick notes on FMDB's coding style
|
||||||
|
|
||||||
|
Spaces, not tabs. Square brackets, not dot notation. Look at what FMDB already does with curly brackets and such, and stick to that style.
|
||||||
|
|
||||||
|
## Reporting bugs
|
||||||
|
|
||||||
|
Reduce your bug down to the smallest amount of code possible. You want to make it super easy for the developers to see and reproduce your bug. If it helps, pretend that the person who can fix your bug is active on shipping 3 major products, works on a handful of open source projects, has a newborn baby, and is generally very very busy.
|
||||||
|
|
||||||
|
And we've even added a template function to main.m (FMDBReportABugFunction) in the FMDB distribution to help you out:
|
||||||
|
|
||||||
|
* Open up fmdb project in Xcode.
|
||||||
|
* Open up main.m and modify the FMDBReportABugFunction to reproduce your bug.
|
||||||
|
* Setup your table(s) in the code.
|
||||||
|
* Make your query or update(s).
|
||||||
|
* Add some assertions which demonstrate the bug.
|
||||||
|
|
||||||
|
Then you can bring it up on the FMDB mailing list by showing your nice and compact FMDBReportABugFunction, or you can report the bug via the github FMDB bug reporter.
|
||||||
|
|
||||||
|
**Optional:**
|
||||||
|
|
||||||
|
Figure out where the bug is, fix it, and send a patch in or bring that up on the mailing list. Make sure all the other tests run after your modifications.
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
The support channels for FMDB are the mailing list (see above), filing a bug here, or maybe on Stack Overflow. So that is to say, support is provided by the community and on a voluntary basis.
|
||||||
|
|
||||||
|
FMDB development is overseen by Gus Mueller of Flying Meat. If FMDB been helpful to you, consider purchasing an app from FM or telling all your friends about it.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
The license for FMDB is contained in the "License.txt" file.
|
||||||
|
|
||||||
|
If you happen to come across either Gus Mueller or Rob Ryan in a bar, you might consider purchasing a drink of their choosing if FMDB has been useful to you.
|
||||||
|
|
||||||
|
(The drink is for them of course, shame on you for trying to keep it.)
|
||||||
10
ios/Pods/FMDB/src/fmdb/FMDB.h
generated
Normal file
10
ios/Pods/FMDB/src/fmdb/FMDB.h
generated
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
FOUNDATION_EXPORT double FMDBVersionNumber;
|
||||||
|
FOUNDATION_EXPORT const unsigned char FMDBVersionString[];
|
||||||
|
|
||||||
|
#import "FMDatabase.h"
|
||||||
|
#import "FMResultSet.h"
|
||||||
|
#import "FMDatabaseAdditions.h"
|
||||||
|
#import "FMDatabaseQueue.h"
|
||||||
|
#import "FMDatabasePool.h"
|
||||||
1162
ios/Pods/FMDB/src/fmdb/FMDatabase.h
generated
Normal file
1162
ios/Pods/FMDB/src/fmdb/FMDatabase.h
generated
Normal file
File diff suppressed because it is too large
Load Diff
1479
ios/Pods/FMDB/src/fmdb/FMDatabase.m
generated
Normal file
1479
ios/Pods/FMDB/src/fmdb/FMDatabase.m
generated
Normal file
File diff suppressed because it is too large
Load Diff
278
ios/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h
generated
Normal file
278
ios/Pods/FMDB/src/fmdb/FMDatabaseAdditions.h
generated
Normal file
@@ -0,0 +1,278 @@
|
|||||||
|
//
|
||||||
|
// FMDatabaseAdditions.h
|
||||||
|
// fmdb
|
||||||
|
//
|
||||||
|
// Created by August Mueller on 10/30/05.
|
||||||
|
// Copyright 2005 Flying Meat Inc.. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import "FMDatabase.h"
|
||||||
|
|
||||||
|
|
||||||
|
/** Category of additions for `<FMDatabase>` class.
|
||||||
|
|
||||||
|
### See also
|
||||||
|
|
||||||
|
- `<FMDatabase>`
|
||||||
|
*/
|
||||||
|
|
||||||
|
@interface FMDatabase (FMDatabaseAdditions)
|
||||||
|
|
||||||
|
///----------------------------------------
|
||||||
|
/// @name Return results of SQL to variable
|
||||||
|
///----------------------------------------
|
||||||
|
|
||||||
|
/** Return `int` value for query
|
||||||
|
|
||||||
|
@param query The SQL query to be performed.
|
||||||
|
@param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.
|
||||||
|
|
||||||
|
@return `int` value.
|
||||||
|
|
||||||
|
@note To use this method from Swift, you must include `FMDatabaseAdditionsVariadic.swift` in your project.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (int)intForQuery:(NSString*)query, ...;
|
||||||
|
|
||||||
|
/** Return `long` value for query
|
||||||
|
|
||||||
|
@param query The SQL query to be performed.
|
||||||
|
@param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.
|
||||||
|
|
||||||
|
@return `long` value.
|
||||||
|
|
||||||
|
@note To use this method from Swift, you must include `FMDatabaseAdditionsVariadic.swift` in your project.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (long)longForQuery:(NSString*)query, ...;
|
||||||
|
|
||||||
|
/** Return `BOOL` value for query
|
||||||
|
|
||||||
|
@param query The SQL query to be performed.
|
||||||
|
@param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.
|
||||||
|
|
||||||
|
@return `BOOL` value.
|
||||||
|
|
||||||
|
@note To use this method from Swift, you must include `FMDatabaseAdditionsVariadic.swift` in your project.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)boolForQuery:(NSString*)query, ...;
|
||||||
|
|
||||||
|
/** Return `double` value for query
|
||||||
|
|
||||||
|
@param query The SQL query to be performed.
|
||||||
|
@param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.
|
||||||
|
|
||||||
|
@return `double` value.
|
||||||
|
|
||||||
|
@note To use this method from Swift, you must include `FMDatabaseAdditionsVariadic.swift` in your project.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (double)doubleForQuery:(NSString*)query, ...;
|
||||||
|
|
||||||
|
/** Return `NSString` value for query
|
||||||
|
|
||||||
|
@param query The SQL query to be performed.
|
||||||
|
@param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.
|
||||||
|
|
||||||
|
@return `NSString` value.
|
||||||
|
|
||||||
|
@note To use this method from Swift, you must include `FMDatabaseAdditionsVariadic.swift` in your project.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSString*)stringForQuery:(NSString*)query, ...;
|
||||||
|
|
||||||
|
/** Return `NSData` value for query
|
||||||
|
|
||||||
|
@param query The SQL query to be performed.
|
||||||
|
@param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.
|
||||||
|
|
||||||
|
@return `NSData` value.
|
||||||
|
|
||||||
|
@note To use this method from Swift, you must include `FMDatabaseAdditionsVariadic.swift` in your project.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSData*)dataForQuery:(NSString*)query, ...;
|
||||||
|
|
||||||
|
/** Return `NSDate` value for query
|
||||||
|
|
||||||
|
@param query The SQL query to be performed.
|
||||||
|
@param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.
|
||||||
|
|
||||||
|
@return `NSDate` value.
|
||||||
|
|
||||||
|
@note To use this method from Swift, you must include `FMDatabaseAdditionsVariadic.swift` in your project.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSDate*)dateForQuery:(NSString*)query, ...;
|
||||||
|
|
||||||
|
|
||||||
|
// Notice that there's no dataNoCopyForQuery:.
|
||||||
|
// That would be a bad idea, because we close out the result set, and then what
|
||||||
|
// happens to the data that we just didn't copy? Who knows, not I.
|
||||||
|
|
||||||
|
|
||||||
|
///--------------------------------
|
||||||
|
/// @name Schema related operations
|
||||||
|
///--------------------------------
|
||||||
|
|
||||||
|
/** Does table exist in database?
|
||||||
|
|
||||||
|
@param tableName The name of the table being looked for.
|
||||||
|
|
||||||
|
@return `YES` if table found; `NO` if not found.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)tableExists:(NSString*)tableName;
|
||||||
|
|
||||||
|
/** The schema of the database.
|
||||||
|
|
||||||
|
This will be the schema for the entire database. For each entity, each row of the result set will include the following fields:
|
||||||
|
|
||||||
|
- `type` - The type of entity (e.g. table, index, view, or trigger)
|
||||||
|
- `name` - The name of the object
|
||||||
|
- `tbl_name` - The name of the table to which the object references
|
||||||
|
- `rootpage` - The page number of the root b-tree page for tables and indices
|
||||||
|
- `sql` - The SQL that created the entity
|
||||||
|
|
||||||
|
@return `FMResultSet` of schema; `nil` on error.
|
||||||
|
|
||||||
|
@see [SQLite File Format](http://www.sqlite.org/fileformat.html)
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (FMResultSet*)getSchema;
|
||||||
|
|
||||||
|
/** The schema of the database.
|
||||||
|
|
||||||
|
This will be the schema for a particular table as report by SQLite `PRAGMA`, for example:
|
||||||
|
|
||||||
|
PRAGMA table_info('employees')
|
||||||
|
|
||||||
|
This will report:
|
||||||
|
|
||||||
|
- `cid` - The column ID number
|
||||||
|
- `name` - The name of the column
|
||||||
|
- `type` - The data type specified for the column
|
||||||
|
- `notnull` - whether the field is defined as NOT NULL (i.e. values required)
|
||||||
|
- `dflt_value` - The default value for the column
|
||||||
|
- `pk` - Whether the field is part of the primary key of the table
|
||||||
|
|
||||||
|
@param tableName The name of the table for whom the schema will be returned.
|
||||||
|
|
||||||
|
@return `FMResultSet` of schema; `nil` on error.
|
||||||
|
|
||||||
|
@see [table_info](http://www.sqlite.org/pragma.html#pragma_table_info)
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (FMResultSet*)getTableSchema:(NSString*)tableName;
|
||||||
|
|
||||||
|
/** Test to see if particular column exists for particular table in database
|
||||||
|
|
||||||
|
@param columnName The name of the column.
|
||||||
|
|
||||||
|
@param tableName The name of the table.
|
||||||
|
|
||||||
|
@return `YES` if column exists in table in question; `NO` otherwise.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)columnExists:(NSString*)columnName inTableWithName:(NSString*)tableName;
|
||||||
|
|
||||||
|
/** Test to see if particular column exists for particular table in database
|
||||||
|
|
||||||
|
@param columnName The name of the column.
|
||||||
|
|
||||||
|
@param tableName The name of the table.
|
||||||
|
|
||||||
|
@return `YES` if column exists in table in question; `NO` otherwise.
|
||||||
|
|
||||||
|
@see columnExists:inTableWithName:
|
||||||
|
|
||||||
|
@warning Deprecated - use `<columnExists:inTableWithName:>` instead.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)columnExists:(NSString*)tableName columnName:(NSString*)columnName __attribute__ ((deprecated));
|
||||||
|
|
||||||
|
|
||||||
|
/** Validate SQL statement
|
||||||
|
|
||||||
|
This validates SQL statement by performing `sqlite3_prepare_v2`, but not returning the results, but instead immediately calling `sqlite3_finalize`.
|
||||||
|
|
||||||
|
@param sql The SQL statement being validated.
|
||||||
|
|
||||||
|
@param error This is a pointer to a `NSError` object that will receive the autoreleased `NSError` object if there was any error. If this is `nil`, no `NSError` result will be returned.
|
||||||
|
|
||||||
|
@return `YES` if validation succeeded without incident; `NO` otherwise.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)validateSQL:(NSString*)sql error:(NSError**)error;
|
||||||
|
|
||||||
|
|
||||||
|
///-----------------------------------
|
||||||
|
/// @name Application identifier tasks
|
||||||
|
///-----------------------------------
|
||||||
|
|
||||||
|
/** Retrieve application ID
|
||||||
|
|
||||||
|
@return The `uint32_t` numeric value of the application ID.
|
||||||
|
|
||||||
|
@see setApplicationID:
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (uint32_t)applicationID;
|
||||||
|
|
||||||
|
/** Set the application ID
|
||||||
|
|
||||||
|
@param appID The `uint32_t` numeric value of the application ID.
|
||||||
|
|
||||||
|
@see applicationID
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (void)setApplicationID:(uint32_t)appID;
|
||||||
|
|
||||||
|
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||||
|
/** Retrieve application ID string
|
||||||
|
|
||||||
|
@return The `NSString` value of the application ID.
|
||||||
|
|
||||||
|
@see setApplicationIDString:
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
- (NSString*)applicationIDString;
|
||||||
|
|
||||||
|
/** Set the application ID string
|
||||||
|
|
||||||
|
@param string The `NSString` value of the application ID.
|
||||||
|
|
||||||
|
@see applicationIDString
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (void)setApplicationIDString:(NSString*)string;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
///-----------------------------------
|
||||||
|
/// @name user version identifier tasks
|
||||||
|
///-----------------------------------
|
||||||
|
|
||||||
|
/** Retrieve user version
|
||||||
|
|
||||||
|
@return The `uint32_t` numeric value of the user version.
|
||||||
|
|
||||||
|
@see setUserVersion:
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (uint32_t)userVersion;
|
||||||
|
|
||||||
|
/** Set the user-version
|
||||||
|
|
||||||
|
@param version The `uint32_t` numeric value of the user version.
|
||||||
|
|
||||||
|
@see userVersion
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (void)setUserVersion:(uint32_t)version;
|
||||||
|
|
||||||
|
@end
|
||||||
246
ios/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m
generated
Normal file
246
ios/Pods/FMDB/src/fmdb/FMDatabaseAdditions.m
generated
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
//
|
||||||
|
// FMDatabaseAdditions.m
|
||||||
|
// fmdb
|
||||||
|
//
|
||||||
|
// Created by August Mueller on 10/30/05.
|
||||||
|
// Copyright 2005 Flying Meat Inc.. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "FMDatabase.h"
|
||||||
|
#import "FMDatabaseAdditions.h"
|
||||||
|
#import "TargetConditionals.h"
|
||||||
|
|
||||||
|
#if FMDB_SQLITE_STANDALONE
|
||||||
|
#import <sqlite3/sqlite3.h>
|
||||||
|
#else
|
||||||
|
#import <sqlite3.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@interface FMDatabase (PrivateStuff)
|
||||||
|
- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arrayArgs orDictionary:(NSDictionary *)dictionaryArgs orVAList:(va_list)args;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation FMDatabase (FMDatabaseAdditions)
|
||||||
|
|
||||||
|
#define RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(type, sel) \
|
||||||
|
va_list args; \
|
||||||
|
va_start(args, query); \
|
||||||
|
FMResultSet *resultSet = [self executeQuery:query withArgumentsInArray:0x00 orDictionary:0x00 orVAList:args]; \
|
||||||
|
va_end(args); \
|
||||||
|
if (![resultSet next]) { return (type)0; } \
|
||||||
|
type ret = [resultSet sel:0]; \
|
||||||
|
[resultSet close]; \
|
||||||
|
[resultSet setParentDB:nil]; \
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
|
||||||
|
- (NSString*)stringForQuery:(NSString*)query, ... {
|
||||||
|
RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSString *, stringForColumnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (int)intForQuery:(NSString*)query, ... {
|
||||||
|
RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(int, intForColumnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (long)longForQuery:(NSString*)query, ... {
|
||||||
|
RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(long, longForColumnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)boolForQuery:(NSString*)query, ... {
|
||||||
|
RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(BOOL, boolForColumnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (double)doubleForQuery:(NSString*)query, ... {
|
||||||
|
RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(double, doubleForColumnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSData*)dataForQuery:(NSString*)query, ... {
|
||||||
|
RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSData *, dataForColumnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDate*)dateForQuery:(NSString*)query, ... {
|
||||||
|
RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSDate *, dateForColumnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (BOOL)tableExists:(NSString*)tableName {
|
||||||
|
|
||||||
|
tableName = [tableName lowercaseString];
|
||||||
|
|
||||||
|
FMResultSet *rs = [self executeQuery:@"select [sql] from sqlite_master where [type] = 'table' and lower(name) = ?", tableName];
|
||||||
|
|
||||||
|
//if at least one next exists, table exists
|
||||||
|
BOOL returnBool = [rs next];
|
||||||
|
|
||||||
|
//close and free object
|
||||||
|
[rs close];
|
||||||
|
|
||||||
|
return returnBool;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
get table with list of tables: result colums: type[STRING], name[STRING],tbl_name[STRING],rootpage[INTEGER],sql[STRING]
|
||||||
|
check if table exist in database (patch from OZLB)
|
||||||
|
*/
|
||||||
|
- (FMResultSet*)getSchema {
|
||||||
|
|
||||||
|
//result colums: type[STRING], name[STRING],tbl_name[STRING],rootpage[INTEGER],sql[STRING]
|
||||||
|
FMResultSet *rs = [self executeQuery:@"SELECT type, name, tbl_name, rootpage, sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master) WHERE type != 'meta' AND name NOT LIKE 'sqlite_%' ORDER BY tbl_name, type DESC, name"];
|
||||||
|
|
||||||
|
return rs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
get table schema: result colums: cid[INTEGER], name,type [STRING], notnull[INTEGER], dflt_value[],pk[INTEGER]
|
||||||
|
*/
|
||||||
|
- (FMResultSet*)getTableSchema:(NSString*)tableName {
|
||||||
|
|
||||||
|
//result colums: cid[INTEGER], name,type [STRING], notnull[INTEGER], dflt_value[],pk[INTEGER]
|
||||||
|
FMResultSet *rs = [self executeQuery:[NSString stringWithFormat: @"pragma table_info('%@')", tableName]];
|
||||||
|
|
||||||
|
return rs;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)columnExists:(NSString*)columnName inTableWithName:(NSString*)tableName {
|
||||||
|
|
||||||
|
BOOL returnBool = NO;
|
||||||
|
|
||||||
|
tableName = [tableName lowercaseString];
|
||||||
|
columnName = [columnName lowercaseString];
|
||||||
|
|
||||||
|
FMResultSet *rs = [self getTableSchema:tableName];
|
||||||
|
|
||||||
|
//check if column is present in table schema
|
||||||
|
while ([rs next]) {
|
||||||
|
if ([[[rs stringForColumn:@"name"] lowercaseString] isEqualToString:columnName]) {
|
||||||
|
returnBool = YES;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//If this is not done FMDatabase instance stays out of pool
|
||||||
|
[rs close];
|
||||||
|
|
||||||
|
return returnBool;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- (uint32_t)applicationID {
|
||||||
|
#if SQLITE_VERSION_NUMBER >= 3007017
|
||||||
|
uint32_t r = 0;
|
||||||
|
|
||||||
|
FMResultSet *rs = [self executeQuery:@"pragma application_id"];
|
||||||
|
|
||||||
|
if ([rs next]) {
|
||||||
|
r = (uint32_t)[rs longLongIntForColumnIndex:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
[rs close];
|
||||||
|
|
||||||
|
return r;
|
||||||
|
#else
|
||||||
|
NSString *errorMessage = NSLocalizedString(@"Application ID functions require SQLite 3.7.17", nil);
|
||||||
|
if (self.logsErrors) NSLog(@"%@", errorMessage);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setApplicationID:(uint32_t)appID {
|
||||||
|
#if SQLITE_VERSION_NUMBER >= 3007017
|
||||||
|
NSString *query = [NSString stringWithFormat:@"pragma application_id=%d", appID];
|
||||||
|
FMResultSet *rs = [self executeQuery:query];
|
||||||
|
[rs next];
|
||||||
|
[rs close];
|
||||||
|
#else
|
||||||
|
NSString *errorMessage = NSLocalizedString(@"Application ID functions require SQLite 3.7.17", nil);
|
||||||
|
if (self.logsErrors) NSLog(@"%@", errorMessage);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||||
|
|
||||||
|
- (NSString*)applicationIDString {
|
||||||
|
#if SQLITE_VERSION_NUMBER >= 3007017
|
||||||
|
NSString *s = NSFileTypeForHFSTypeCode([self applicationID]);
|
||||||
|
|
||||||
|
assert([s length] == 6);
|
||||||
|
|
||||||
|
s = [s substringWithRange:NSMakeRange(1, 4)];
|
||||||
|
|
||||||
|
|
||||||
|
return s;
|
||||||
|
#else
|
||||||
|
NSString *errorMessage = NSLocalizedString(@"Application ID functions require SQLite 3.7.17", nil);
|
||||||
|
if (self.logsErrors) NSLog(@"%@", errorMessage);
|
||||||
|
return nil;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setApplicationIDString:(NSString*)s {
|
||||||
|
#if SQLITE_VERSION_NUMBER >= 3007017
|
||||||
|
if ([s length] != 4) {
|
||||||
|
NSLog(@"setApplicationIDString: string passed is not exactly 4 chars long. (was %ld)", [s length]);
|
||||||
|
}
|
||||||
|
|
||||||
|
[self setApplicationID:NSHFSTypeCodeFromFileType([NSString stringWithFormat:@"'%@'", s])];
|
||||||
|
#else
|
||||||
|
NSString *errorMessage = NSLocalizedString(@"Application ID functions require SQLite 3.7.17", nil);
|
||||||
|
if (self.logsErrors) NSLog(@"%@", errorMessage);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
- (uint32_t)userVersion {
|
||||||
|
uint32_t r = 0;
|
||||||
|
|
||||||
|
FMResultSet *rs = [self executeQuery:@"pragma user_version"];
|
||||||
|
|
||||||
|
if ([rs next]) {
|
||||||
|
r = (uint32_t)[rs longLongIntForColumnIndex:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
[rs close];
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setUserVersion:(uint32_t)version {
|
||||||
|
NSString *query = [NSString stringWithFormat:@"pragma user_version = %d", version];
|
||||||
|
FMResultSet *rs = [self executeQuery:query];
|
||||||
|
[rs next];
|
||||||
|
[rs close];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wdeprecated-implementations"
|
||||||
|
|
||||||
|
- (BOOL)columnExists:(NSString*)tableName columnName:(NSString*)columnName __attribute__ ((deprecated)) {
|
||||||
|
return [self columnExists:columnName inTableWithName:tableName];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
|
||||||
|
|
||||||
|
- (BOOL)validateSQL:(NSString*)sql error:(NSError**)error {
|
||||||
|
sqlite3_stmt *pStmt = NULL;
|
||||||
|
BOOL validationSucceeded = YES;
|
||||||
|
|
||||||
|
int rc = sqlite3_prepare_v2(_db, [sql UTF8String], -1, &pStmt, 0);
|
||||||
|
if (rc != SQLITE_OK) {
|
||||||
|
validationSucceeded = NO;
|
||||||
|
if (error) {
|
||||||
|
*error = [NSError errorWithDomain:NSCocoaErrorDomain
|
||||||
|
code:[self lastErrorCode]
|
||||||
|
userInfo:[NSDictionary dictionaryWithObject:[self lastErrorMessage]
|
||||||
|
forKey:NSLocalizedDescriptionKey]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlite3_finalize(pStmt);
|
||||||
|
|
||||||
|
return validationSucceeded;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
200
ios/Pods/FMDB/src/fmdb/FMDatabasePool.h
generated
Normal file
200
ios/Pods/FMDB/src/fmdb/FMDatabasePool.h
generated
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
//
|
||||||
|
// FMDatabasePool.h
|
||||||
|
// fmdb
|
||||||
|
//
|
||||||
|
// Created by August Mueller on 6/22/11.
|
||||||
|
// Copyright 2011 Flying Meat Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@class FMDatabase;
|
||||||
|
|
||||||
|
/** Pool of `<FMDatabase>` objects.
|
||||||
|
|
||||||
|
### See also
|
||||||
|
|
||||||
|
- `<FMDatabaseQueue>`
|
||||||
|
- `<FMDatabase>`
|
||||||
|
|
||||||
|
@warning Before using `FMDatabasePool`, please consider using `<FMDatabaseQueue>` instead.
|
||||||
|
|
||||||
|
If you really really really know what you're doing and `FMDatabasePool` is what
|
||||||
|
you really really need (ie, you're using a read only database), OK you can use
|
||||||
|
it. But just be careful not to deadlock!
|
||||||
|
|
||||||
|
For an example on deadlocking, search for:
|
||||||
|
`ONLY_USE_THE_POOL_IF_YOU_ARE_DOING_READS_OTHERWISE_YOULL_DEADLOCK_USE_FMDATABASEQUEUE_INSTEAD`
|
||||||
|
in the main.m file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@interface FMDatabasePool : NSObject {
|
||||||
|
NSString *_path;
|
||||||
|
|
||||||
|
dispatch_queue_t _lockQueue;
|
||||||
|
|
||||||
|
NSMutableArray *_databaseInPool;
|
||||||
|
NSMutableArray *_databaseOutPool;
|
||||||
|
|
||||||
|
__unsafe_unretained id _delegate;
|
||||||
|
|
||||||
|
NSUInteger _maximumNumberOfDatabasesToCreate;
|
||||||
|
int _openFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Database path */
|
||||||
|
|
||||||
|
@property (atomic, retain) NSString *path;
|
||||||
|
|
||||||
|
/** Delegate object */
|
||||||
|
|
||||||
|
@property (atomic, assign) id delegate;
|
||||||
|
|
||||||
|
/** Maximum number of databases to create */
|
||||||
|
|
||||||
|
@property (atomic, assign) NSUInteger maximumNumberOfDatabasesToCreate;
|
||||||
|
|
||||||
|
/** Open flags */
|
||||||
|
|
||||||
|
@property (atomic, readonly) int openFlags;
|
||||||
|
|
||||||
|
|
||||||
|
///---------------------
|
||||||
|
/// @name Initialization
|
||||||
|
///---------------------
|
||||||
|
|
||||||
|
/** Create pool using path.
|
||||||
|
|
||||||
|
@param aPath The file path of the database.
|
||||||
|
|
||||||
|
@return The `FMDatabasePool` object. `nil` on error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
+ (instancetype)databasePoolWithPath:(NSString*)aPath;
|
||||||
|
|
||||||
|
/** Create pool using path and specified flags
|
||||||
|
|
||||||
|
@param aPath The file path of the database.
|
||||||
|
@param openFlags Flags passed to the openWithFlags method of the database
|
||||||
|
|
||||||
|
@return The `FMDatabasePool` object. `nil` on error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
+ (instancetype)databasePoolWithPath:(NSString*)aPath flags:(int)openFlags;
|
||||||
|
|
||||||
|
/** Create pool using path.
|
||||||
|
|
||||||
|
@param aPath The file path of the database.
|
||||||
|
|
||||||
|
@return The `FMDatabasePool` object. `nil` on error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (instancetype)initWithPath:(NSString*)aPath;
|
||||||
|
|
||||||
|
/** Create pool using path and specified flags.
|
||||||
|
|
||||||
|
@param aPath The file path of the database.
|
||||||
|
@param openFlags Flags passed to the openWithFlags method of the database
|
||||||
|
|
||||||
|
@return The `FMDatabasePool` object. `nil` on error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags;
|
||||||
|
|
||||||
|
///------------------------------------------------
|
||||||
|
/// @name Keeping track of checked in/out databases
|
||||||
|
///------------------------------------------------
|
||||||
|
|
||||||
|
/** Number of checked-in databases in pool
|
||||||
|
|
||||||
|
@returns Number of databases
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSUInteger)countOfCheckedInDatabases;
|
||||||
|
|
||||||
|
/** Number of checked-out databases in pool
|
||||||
|
|
||||||
|
@returns Number of databases
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSUInteger)countOfCheckedOutDatabases;
|
||||||
|
|
||||||
|
/** Total number of databases in pool
|
||||||
|
|
||||||
|
@returns Number of databases
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSUInteger)countOfOpenDatabases;
|
||||||
|
|
||||||
|
/** Release all databases in pool */
|
||||||
|
|
||||||
|
- (void)releaseAllDatabases;
|
||||||
|
|
||||||
|
///------------------------------------------
|
||||||
|
/// @name Perform database operations in pool
|
||||||
|
///------------------------------------------
|
||||||
|
|
||||||
|
/** Synchronously perform database operations in pool.
|
||||||
|
|
||||||
|
@param block The code to be run on the `FMDatabasePool` pool.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (void)inDatabase:(void (^)(FMDatabase *db))block;
|
||||||
|
|
||||||
|
/** Synchronously perform database operations in pool using transaction.
|
||||||
|
|
||||||
|
@param block The code to be run on the `FMDatabasePool` pool.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block;
|
||||||
|
|
||||||
|
/** Synchronously perform database operations in pool using deferred transaction.
|
||||||
|
|
||||||
|
@param block The code to be run on the `FMDatabasePool` pool.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block;
|
||||||
|
|
||||||
|
/** Synchronously perform database operations in pool using save point.
|
||||||
|
|
||||||
|
@param block The code to be run on the `FMDatabasePool` pool.
|
||||||
|
|
||||||
|
@return `NSError` object if error; `nil` if successful.
|
||||||
|
|
||||||
|
@warning You can not nest these, since calling it will pull another database out of the pool and you'll get a deadlock. If you need to nest, use `<[FMDatabase startSavePointWithName:error:]>` instead.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
/** FMDatabasePool delegate category
|
||||||
|
|
||||||
|
This is a category that defines the protocol for the FMDatabasePool delegate
|
||||||
|
*/
|
||||||
|
|
||||||
|
@interface NSObject (FMDatabasePoolDelegate)
|
||||||
|
|
||||||
|
/** Asks the delegate whether database should be added to the pool.
|
||||||
|
|
||||||
|
@param pool The `FMDatabasePool` object.
|
||||||
|
@param database The `FMDatabase` object.
|
||||||
|
|
||||||
|
@return `YES` if it should add database to pool; `NO` if not.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)databasePool:(FMDatabasePool*)pool shouldAddDatabaseToPool:(FMDatabase*)database;
|
||||||
|
|
||||||
|
/** Tells the delegate that database was added to the pool.
|
||||||
|
|
||||||
|
@param pool The `FMDatabasePool` object.
|
||||||
|
@param database The `FMDatabase` object.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (void)databasePool:(FMDatabasePool*)pool didAddDatabase:(FMDatabase*)database;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
283
ios/Pods/FMDB/src/fmdb/FMDatabasePool.m
generated
Normal file
283
ios/Pods/FMDB/src/fmdb/FMDatabasePool.m
generated
Normal file
@@ -0,0 +1,283 @@
|
|||||||
|
//
|
||||||
|
// FMDatabasePool.m
|
||||||
|
// fmdb
|
||||||
|
//
|
||||||
|
// Created by August Mueller on 6/22/11.
|
||||||
|
// Copyright 2011 Flying Meat Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#if FMDB_SQLITE_STANDALONE
|
||||||
|
#import <sqlite3/sqlite3.h>
|
||||||
|
#else
|
||||||
|
#import <sqlite3.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#import "FMDatabasePool.h"
|
||||||
|
#import "FMDatabase.h"
|
||||||
|
|
||||||
|
@interface FMDatabasePool()
|
||||||
|
|
||||||
|
- (void)pushDatabaseBackInPool:(FMDatabase*)db;
|
||||||
|
- (FMDatabase*)db;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation FMDatabasePool
|
||||||
|
@synthesize path=_path;
|
||||||
|
@synthesize delegate=_delegate;
|
||||||
|
@synthesize maximumNumberOfDatabasesToCreate=_maximumNumberOfDatabasesToCreate;
|
||||||
|
@synthesize openFlags=_openFlags;
|
||||||
|
|
||||||
|
|
||||||
|
+ (instancetype)databasePoolWithPath:(NSString*)aPath {
|
||||||
|
return FMDBReturnAutoreleased([[self alloc] initWithPath:aPath]);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (instancetype)databasePoolWithPath:(NSString*)aPath flags:(int)openFlags {
|
||||||
|
return FMDBReturnAutoreleased([[self alloc] initWithPath:aPath flags:openFlags]);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags {
|
||||||
|
|
||||||
|
self = [super init];
|
||||||
|
|
||||||
|
if (self != nil) {
|
||||||
|
_path = [aPath copy];
|
||||||
|
_lockQueue = dispatch_queue_create([[NSString stringWithFormat:@"fmdb.%@", self] UTF8String], NULL);
|
||||||
|
_databaseInPool = FMDBReturnRetained([NSMutableArray array]);
|
||||||
|
_databaseOutPool = FMDBReturnRetained([NSMutableArray array]);
|
||||||
|
_openFlags = openFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithPath:(NSString*)aPath
|
||||||
|
{
|
||||||
|
// default flags for sqlite3_open
|
||||||
|
return [self initWithPath:aPath flags:SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)init {
|
||||||
|
return [self initWithPath:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
|
||||||
|
_delegate = 0x00;
|
||||||
|
FMDBRelease(_path);
|
||||||
|
FMDBRelease(_databaseInPool);
|
||||||
|
FMDBRelease(_databaseOutPool);
|
||||||
|
|
||||||
|
if (_lockQueue) {
|
||||||
|
FMDBDispatchQueueRelease(_lockQueue);
|
||||||
|
_lockQueue = 0x00;
|
||||||
|
}
|
||||||
|
#if ! __has_feature(objc_arc)
|
||||||
|
[super dealloc];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)executeLocked:(void (^)(void))aBlock {
|
||||||
|
dispatch_sync(_lockQueue, aBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)pushDatabaseBackInPool:(FMDatabase*)db {
|
||||||
|
|
||||||
|
if (!db) { // db can be null if we set an upper bound on the # of databases to create.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[self executeLocked:^() {
|
||||||
|
|
||||||
|
if ([self->_databaseInPool containsObject:db]) {
|
||||||
|
[[NSException exceptionWithName:@"Database already in pool" reason:@"The FMDatabase being put back into the pool is already present in the pool" userInfo:nil] raise];
|
||||||
|
}
|
||||||
|
|
||||||
|
[self->_databaseInPool addObject:db];
|
||||||
|
[self->_databaseOutPool removeObject:db];
|
||||||
|
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (FMDatabase*)db {
|
||||||
|
|
||||||
|
__block FMDatabase *db;
|
||||||
|
|
||||||
|
|
||||||
|
[self executeLocked:^() {
|
||||||
|
db = [self->_databaseInPool lastObject];
|
||||||
|
|
||||||
|
BOOL shouldNotifyDelegate = NO;
|
||||||
|
|
||||||
|
if (db) {
|
||||||
|
[self->_databaseOutPool addObject:db];
|
||||||
|
[self->_databaseInPool removeLastObject];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
if (self->_maximumNumberOfDatabasesToCreate) {
|
||||||
|
NSUInteger currentCount = [self->_databaseOutPool count] + [self->_databaseInPool count];
|
||||||
|
|
||||||
|
if (currentCount >= self->_maximumNumberOfDatabasesToCreate) {
|
||||||
|
NSLog(@"Maximum number of databases (%ld) has already been reached!", (long)currentCount);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
db = [FMDatabase databaseWithPath:self->_path];
|
||||||
|
shouldNotifyDelegate = YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
//This ensures that the db is opened before returning
|
||||||
|
#if SQLITE_VERSION_NUMBER >= 3005000
|
||||||
|
BOOL success = [db openWithFlags:self->_openFlags];
|
||||||
|
#else
|
||||||
|
BOOL success = [db open];
|
||||||
|
#endif
|
||||||
|
if (success) {
|
||||||
|
if ([self->_delegate respondsToSelector:@selector(databasePool:shouldAddDatabaseToPool:)] && ![self->_delegate databasePool:self shouldAddDatabaseToPool:db]) {
|
||||||
|
[db close];
|
||||||
|
db = 0x00;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//It should not get added in the pool twice if lastObject was found
|
||||||
|
if (![self->_databaseOutPool containsObject:db]) {
|
||||||
|
[self->_databaseOutPool addObject:db];
|
||||||
|
|
||||||
|
if (shouldNotifyDelegate && [self->_delegate respondsToSelector:@selector(databasePool:didAddDatabase:)]) {
|
||||||
|
[self->_delegate databasePool:self didAddDatabase:db];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NSLog(@"Could not open up the database at path %@", self->_path);
|
||||||
|
db = 0x00;
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
|
||||||
|
return db;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUInteger)countOfCheckedInDatabases {
|
||||||
|
|
||||||
|
__block NSUInteger count;
|
||||||
|
|
||||||
|
[self executeLocked:^() {
|
||||||
|
count = [self->_databaseInPool count];
|
||||||
|
}];
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUInteger)countOfCheckedOutDatabases {
|
||||||
|
|
||||||
|
__block NSUInteger count;
|
||||||
|
|
||||||
|
[self executeLocked:^() {
|
||||||
|
count = [self->_databaseOutPool count];
|
||||||
|
}];
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUInteger)countOfOpenDatabases {
|
||||||
|
__block NSUInteger count;
|
||||||
|
|
||||||
|
[self executeLocked:^() {
|
||||||
|
count = [self->_databaseOutPool count] + [self->_databaseInPool count];
|
||||||
|
}];
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)releaseAllDatabases {
|
||||||
|
[self executeLocked:^() {
|
||||||
|
[self->_databaseOutPool removeAllObjects];
|
||||||
|
[self->_databaseInPool removeAllObjects];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)inDatabase:(void (^)(FMDatabase *db))block {
|
||||||
|
|
||||||
|
FMDatabase *db = [self db];
|
||||||
|
|
||||||
|
block(db);
|
||||||
|
|
||||||
|
[self pushDatabaseBackInPool:db];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)beginTransaction:(BOOL)useDeferred withBlock:(void (^)(FMDatabase *db, BOOL *rollback))block {
|
||||||
|
|
||||||
|
BOOL shouldRollback = NO;
|
||||||
|
|
||||||
|
FMDatabase *db = [self db];
|
||||||
|
|
||||||
|
if (useDeferred) {
|
||||||
|
[db beginDeferredTransaction];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[db beginTransaction];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
block(db, &shouldRollback);
|
||||||
|
|
||||||
|
if (shouldRollback) {
|
||||||
|
[db rollback];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[db commit];
|
||||||
|
}
|
||||||
|
|
||||||
|
[self pushDatabaseBackInPool:db];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block {
|
||||||
|
[self beginTransaction:YES withBlock:block];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block {
|
||||||
|
[self beginTransaction:NO withBlock:block];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block {
|
||||||
|
#if SQLITE_VERSION_NUMBER >= 3007000
|
||||||
|
static unsigned long savePointIdx = 0;
|
||||||
|
|
||||||
|
NSString *name = [NSString stringWithFormat:@"savePoint%ld", savePointIdx++];
|
||||||
|
|
||||||
|
BOOL shouldRollback = NO;
|
||||||
|
|
||||||
|
FMDatabase *db = [self db];
|
||||||
|
|
||||||
|
NSError *err = 0x00;
|
||||||
|
|
||||||
|
if (![db startSavePointWithName:name error:&err]) {
|
||||||
|
[self pushDatabaseBackInPool:db];
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
block(db, &shouldRollback);
|
||||||
|
|
||||||
|
if (shouldRollback) {
|
||||||
|
// We need to rollback and release this savepoint to remove it
|
||||||
|
[db rollbackToSavePointWithName:name error:&err];
|
||||||
|
}
|
||||||
|
[db releaseSavePointWithName:name error:&err];
|
||||||
|
|
||||||
|
[self pushDatabaseBackInPool:db];
|
||||||
|
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
|
NSString *errorMessage = NSLocalizedString(@"Save point functions require SQLite 3.7", nil);
|
||||||
|
if (self.logsErrors) NSLog(@"%@", errorMessage);
|
||||||
|
return [NSError errorWithDomain:@"FMDatabase" code:0 userInfo:@{NSLocalizedDescriptionKey : errorMessage}];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
182
ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h
generated
Normal file
182
ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h
generated
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
//
|
||||||
|
// FMDatabaseQueue.h
|
||||||
|
// fmdb
|
||||||
|
//
|
||||||
|
// Created by August Mueller on 6/22/11.
|
||||||
|
// Copyright 2011 Flying Meat Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@class FMDatabase;
|
||||||
|
|
||||||
|
/** To perform queries and updates on multiple threads, you'll want to use `FMDatabaseQueue`.
|
||||||
|
|
||||||
|
Using a single instance of `<FMDatabase>` from multiple threads at once is a bad idea. It has always been OK to make a `<FMDatabase>` object *per thread*. Just don't share a single instance across threads, and definitely not across multiple threads at the same time.
|
||||||
|
|
||||||
|
Instead, use `FMDatabaseQueue`. Here's how to use it:
|
||||||
|
|
||||||
|
First, make your queue.
|
||||||
|
|
||||||
|
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
|
||||||
|
|
||||||
|
Then use it like so:
|
||||||
|
|
||||||
|
[queue inDatabase:^(FMDatabase *db) {
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
|
||||||
|
|
||||||
|
FMResultSet *rs = [db executeQuery:@"select * from foo"];
|
||||||
|
while ([rs next]) {
|
||||||
|
//…
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
|
||||||
|
An easy way to wrap things up in a transaction can be done like this:
|
||||||
|
|
||||||
|
[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];
|
||||||
|
|
||||||
|
if (whoopsSomethingWrongHappened) {
|
||||||
|
*rollback = YES;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// etc…
|
||||||
|
[db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];
|
||||||
|
}];
|
||||||
|
|
||||||
|
`FMDatabaseQueue` will run the blocks on a serialized queue (hence the name of the class). So if you call `FMDatabaseQueue`'s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won't step on each other's toes, and every one is happy.
|
||||||
|
|
||||||
|
### See also
|
||||||
|
|
||||||
|
- `<FMDatabase>`
|
||||||
|
|
||||||
|
@warning Do not instantiate a single `<FMDatabase>` object and use it across multiple threads. Use `FMDatabaseQueue` instead.
|
||||||
|
|
||||||
|
@warning The calls to `FMDatabaseQueue`'s methods are blocking. So even though you are passing along blocks, they will **not** be run on another thread.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
@interface FMDatabaseQueue : NSObject {
|
||||||
|
NSString *_path;
|
||||||
|
dispatch_queue_t _queue;
|
||||||
|
FMDatabase *_db;
|
||||||
|
int _openFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Path of database */
|
||||||
|
|
||||||
|
@property (atomic, retain) NSString *path;
|
||||||
|
|
||||||
|
/** Open flags */
|
||||||
|
|
||||||
|
@property (atomic, readonly) int openFlags;
|
||||||
|
|
||||||
|
///----------------------------------------------------
|
||||||
|
/// @name Initialization, opening, and closing of queue
|
||||||
|
///----------------------------------------------------
|
||||||
|
|
||||||
|
/** Create queue using path.
|
||||||
|
|
||||||
|
@param aPath The file path of the database.
|
||||||
|
|
||||||
|
@return The `FMDatabaseQueue` object. `nil` on error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
+ (instancetype)databaseQueueWithPath:(NSString*)aPath;
|
||||||
|
|
||||||
|
/** Create queue using path and specified flags.
|
||||||
|
|
||||||
|
@param aPath The file path of the database.
|
||||||
|
@param openFlags Flags passed to the openWithFlags method of the database
|
||||||
|
|
||||||
|
@return The `FMDatabaseQueue` object. `nil` on error.
|
||||||
|
*/
|
||||||
|
+ (instancetype)databaseQueueWithPath:(NSString*)aPath flags:(int)openFlags;
|
||||||
|
|
||||||
|
/** Create queue using path.
|
||||||
|
|
||||||
|
@param aPath The file path of the database.
|
||||||
|
|
||||||
|
@return The `FMDatabaseQueue` object. `nil` on error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (instancetype)initWithPath:(NSString*)aPath;
|
||||||
|
|
||||||
|
/** Create queue using path and specified flags.
|
||||||
|
|
||||||
|
@param aPath The file path of the database.
|
||||||
|
@param openFlags Flags passed to the openWithFlags method of the database
|
||||||
|
|
||||||
|
@return The `FMDatabaseQueue` object. `nil` on error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags;
|
||||||
|
|
||||||
|
/** Create queue using path and specified flags.
|
||||||
|
|
||||||
|
@param aPath The file path of the database.
|
||||||
|
@param openFlags Flags passed to the openWithFlags method of the database
|
||||||
|
@param vfsName The name of a custom virtual file system
|
||||||
|
|
||||||
|
@return The `FMDatabaseQueue` object. `nil` on error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags vfs:(NSString *)vfsName;
|
||||||
|
|
||||||
|
/** Returns the Class of 'FMDatabase' subclass, that will be used to instantiate database object.
|
||||||
|
|
||||||
|
Subclasses can override this method to return specified Class of 'FMDatabase' subclass.
|
||||||
|
|
||||||
|
@return The Class of 'FMDatabase' subclass, that will be used to instantiate database object.
|
||||||
|
*/
|
||||||
|
|
||||||
|
+ (Class)databaseClass;
|
||||||
|
|
||||||
|
/** Close database used by queue. */
|
||||||
|
|
||||||
|
- (void)close;
|
||||||
|
|
||||||
|
///-----------------------------------------------
|
||||||
|
/// @name Dispatching database operations to queue
|
||||||
|
///-----------------------------------------------
|
||||||
|
|
||||||
|
/** Synchronously perform database operations on queue.
|
||||||
|
|
||||||
|
@param block The code to be run on the queue of `FMDatabaseQueue`
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (void)inDatabase:(void (^)(FMDatabase *db))block;
|
||||||
|
|
||||||
|
/** Synchronously perform database operations on queue, using transactions.
|
||||||
|
|
||||||
|
@param block The code to be run on the queue of `FMDatabaseQueue`
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block;
|
||||||
|
|
||||||
|
/** Synchronously perform database operations on queue, using deferred transactions.
|
||||||
|
|
||||||
|
@param block The code to be run on the queue of `FMDatabaseQueue`
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block;
|
||||||
|
|
||||||
|
///-----------------------------------------------
|
||||||
|
/// @name Dispatching database operations to queue
|
||||||
|
///-----------------------------------------------
|
||||||
|
|
||||||
|
/** Synchronously perform database operations using save point.
|
||||||
|
|
||||||
|
@param block The code to be run on the queue of `FMDatabaseQueue`
|
||||||
|
*/
|
||||||
|
|
||||||
|
// NOTE: you can not nest these, since calling it will pull another database out of the pool and you'll get a deadlock.
|
||||||
|
// If you need to nest, use FMDatabase's startSavePointWithName:error: instead.
|
||||||
|
- (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
245
ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m
generated
Normal file
245
ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m
generated
Normal file
@@ -0,0 +1,245 @@
|
|||||||
|
//
|
||||||
|
// FMDatabaseQueue.m
|
||||||
|
// fmdb
|
||||||
|
//
|
||||||
|
// Created by August Mueller on 6/22/11.
|
||||||
|
// Copyright 2011 Flying Meat Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "FMDatabaseQueue.h"
|
||||||
|
#import "FMDatabase.h"
|
||||||
|
|
||||||
|
#if FMDB_SQLITE_STANDALONE
|
||||||
|
#import <sqlite3/sqlite3.h>
|
||||||
|
#else
|
||||||
|
#import <sqlite3.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Note: we call [self retain]; before using dispatch_sync, just incase
|
||||||
|
FMDatabaseQueue is released on another thread and we're in the middle of doing
|
||||||
|
something in dispatch_sync
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A key used to associate the FMDatabaseQueue object with the dispatch_queue_t it uses.
|
||||||
|
* This in turn is used for deadlock detection by seeing if inDatabase: is called on
|
||||||
|
* the queue's dispatch queue, which should not happen and causes a deadlock.
|
||||||
|
*/
|
||||||
|
static const void * const kDispatchQueueSpecificKey = &kDispatchQueueSpecificKey;
|
||||||
|
|
||||||
|
@implementation FMDatabaseQueue
|
||||||
|
|
||||||
|
@synthesize path = _path;
|
||||||
|
@synthesize openFlags = _openFlags;
|
||||||
|
|
||||||
|
+ (instancetype)databaseQueueWithPath:(NSString*)aPath {
|
||||||
|
|
||||||
|
FMDatabaseQueue *q = [[self alloc] initWithPath:aPath];
|
||||||
|
|
||||||
|
FMDBAutorelease(q);
|
||||||
|
|
||||||
|
return q;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (instancetype)databaseQueueWithPath:(NSString*)aPath flags:(int)openFlags {
|
||||||
|
|
||||||
|
FMDatabaseQueue *q = [[self alloc] initWithPath:aPath flags:openFlags];
|
||||||
|
|
||||||
|
FMDBAutorelease(q);
|
||||||
|
|
||||||
|
return q;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (Class)databaseClass {
|
||||||
|
return [FMDatabase class];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags vfs:(NSString *)vfsName {
|
||||||
|
|
||||||
|
self = [super init];
|
||||||
|
|
||||||
|
if (self != nil) {
|
||||||
|
|
||||||
|
_db = [[[self class] databaseClass] databaseWithPath:aPath];
|
||||||
|
FMDBRetain(_db);
|
||||||
|
|
||||||
|
#if SQLITE_VERSION_NUMBER >= 3005000
|
||||||
|
BOOL success = [_db openWithFlags:openFlags vfs:vfsName];
|
||||||
|
#else
|
||||||
|
BOOL success = [_db open];
|
||||||
|
#endif
|
||||||
|
if (!success) {
|
||||||
|
NSLog(@"Could not create database queue for path %@", aPath);
|
||||||
|
FMDBRelease(self);
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
_path = FMDBReturnRetained(aPath);
|
||||||
|
|
||||||
|
_queue = dispatch_queue_create([[NSString stringWithFormat:@"fmdb.%@", self] UTF8String], NULL);
|
||||||
|
dispatch_queue_set_specific(_queue, kDispatchQueueSpecificKey, (__bridge void *)self, NULL);
|
||||||
|
_openFlags = openFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags {
|
||||||
|
return [self initWithPath:aPath flags:openFlags vfs:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithPath:(NSString*)aPath {
|
||||||
|
|
||||||
|
// default flags for sqlite3_open
|
||||||
|
return [self initWithPath:aPath flags:SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE vfs:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)init {
|
||||||
|
return [self initWithPath:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
|
||||||
|
FMDBRelease(_db);
|
||||||
|
FMDBRelease(_path);
|
||||||
|
|
||||||
|
if (_queue) {
|
||||||
|
FMDBDispatchQueueRelease(_queue);
|
||||||
|
_queue = 0x00;
|
||||||
|
}
|
||||||
|
#if ! __has_feature(objc_arc)
|
||||||
|
[super dealloc];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)close {
|
||||||
|
FMDBRetain(self);
|
||||||
|
dispatch_sync(_queue, ^() {
|
||||||
|
[self->_db close];
|
||||||
|
FMDBRelease(_db);
|
||||||
|
self->_db = 0x00;
|
||||||
|
});
|
||||||
|
FMDBRelease(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (FMDatabase*)database {
|
||||||
|
if (!_db) {
|
||||||
|
_db = FMDBReturnRetained([FMDatabase databaseWithPath:_path]);
|
||||||
|
|
||||||
|
#if SQLITE_VERSION_NUMBER >= 3005000
|
||||||
|
BOOL success = [_db openWithFlags:_openFlags];
|
||||||
|
#else
|
||||||
|
BOOL success = [_db open];
|
||||||
|
#endif
|
||||||
|
if (!success) {
|
||||||
|
NSLog(@"FMDatabaseQueue could not reopen database for path %@", _path);
|
||||||
|
FMDBRelease(_db);
|
||||||
|
_db = 0x00;
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return _db;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)inDatabase:(void (^)(FMDatabase *db))block {
|
||||||
|
/* Get the currently executing queue (which should probably be nil, but in theory could be another DB queue
|
||||||
|
* and then check it against self to make sure we're not about to deadlock. */
|
||||||
|
FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey);
|
||||||
|
assert(currentSyncQueue != self && "inDatabase: was called reentrantly on the same queue, which would lead to a deadlock");
|
||||||
|
|
||||||
|
FMDBRetain(self);
|
||||||
|
|
||||||
|
dispatch_sync(_queue, ^() {
|
||||||
|
|
||||||
|
FMDatabase *db = [self database];
|
||||||
|
block(db);
|
||||||
|
|
||||||
|
if ([db hasOpenResultSets]) {
|
||||||
|
NSLog(@"Warning: there is at least one open result set around after performing [FMDatabaseQueue inDatabase:]");
|
||||||
|
|
||||||
|
#if defined(DEBUG) && DEBUG
|
||||||
|
NSSet *openSetCopy = FMDBReturnAutoreleased([[db valueForKey:@"_openResultSets"] copy]);
|
||||||
|
for (NSValue *rsInWrappedInATastyValueMeal in openSetCopy) {
|
||||||
|
FMResultSet *rs = (FMResultSet *)[rsInWrappedInATastyValueMeal pointerValue];
|
||||||
|
NSLog(@"query: '%@'", [rs query]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
FMDBRelease(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)beginTransaction:(BOOL)useDeferred withBlock:(void (^)(FMDatabase *db, BOOL *rollback))block {
|
||||||
|
FMDBRetain(self);
|
||||||
|
dispatch_sync(_queue, ^() {
|
||||||
|
|
||||||
|
BOOL shouldRollback = NO;
|
||||||
|
|
||||||
|
if (useDeferred) {
|
||||||
|
[[self database] beginDeferredTransaction];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[[self database] beginTransaction];
|
||||||
|
}
|
||||||
|
|
||||||
|
block([self database], &shouldRollback);
|
||||||
|
|
||||||
|
if (shouldRollback) {
|
||||||
|
[[self database] rollback];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[[self database] commit];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
FMDBRelease(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block {
|
||||||
|
[self beginTransaction:YES withBlock:block];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block {
|
||||||
|
[self beginTransaction:NO withBlock:block];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block {
|
||||||
|
#if SQLITE_VERSION_NUMBER >= 3007000
|
||||||
|
static unsigned long savePointIdx = 0;
|
||||||
|
__block NSError *err = 0x00;
|
||||||
|
FMDBRetain(self);
|
||||||
|
dispatch_sync(_queue, ^() {
|
||||||
|
|
||||||
|
NSString *name = [NSString stringWithFormat:@"savePoint%ld", savePointIdx++];
|
||||||
|
|
||||||
|
BOOL shouldRollback = NO;
|
||||||
|
|
||||||
|
if ([[self database] startSavePointWithName:name error:&err]) {
|
||||||
|
|
||||||
|
block([self database], &shouldRollback);
|
||||||
|
|
||||||
|
if (shouldRollback) {
|
||||||
|
// We need to rollback and release this savepoint to remove it
|
||||||
|
[[self database] rollbackToSavePointWithName:name error:&err];
|
||||||
|
}
|
||||||
|
[[self database] releaseSavePointWithName:name error:&err];
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
FMDBRelease(self);
|
||||||
|
return err;
|
||||||
|
#else
|
||||||
|
NSString *errorMessage = NSLocalizedString(@"Save point functions require SQLite 3.7", nil);
|
||||||
|
if (self.logsErrors) NSLog(@"%@", errorMessage);
|
||||||
|
return [NSError errorWithDomain:@"FMDatabase" code:0 userInfo:@{NSLocalizedDescriptionKey : errorMessage}];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
468
ios/Pods/FMDB/src/fmdb/FMResultSet.h
generated
Normal file
468
ios/Pods/FMDB/src/fmdb/FMResultSet.h
generated
Normal file
@@ -0,0 +1,468 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#ifndef __has_feature // Optional.
|
||||||
|
#define __has_feature(x) 0 // Compatibility with non-clang compilers.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NS_RETURNS_NOT_RETAINED
|
||||||
|
#if __has_feature(attribute_ns_returns_not_retained)
|
||||||
|
#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained))
|
||||||
|
#else
|
||||||
|
#define NS_RETURNS_NOT_RETAINED
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@class FMDatabase;
|
||||||
|
@class FMStatement;
|
||||||
|
|
||||||
|
/** Represents the results of executing a query on an `<FMDatabase>`.
|
||||||
|
|
||||||
|
### See also
|
||||||
|
|
||||||
|
- `<FMDatabase>`
|
||||||
|
*/
|
||||||
|
|
||||||
|
@interface FMResultSet : NSObject {
|
||||||
|
FMDatabase *_parentDB;
|
||||||
|
FMStatement *_statement;
|
||||||
|
|
||||||
|
NSString *_query;
|
||||||
|
NSMutableDictionary *_columnNameToIndexMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
///-----------------
|
||||||
|
/// @name Properties
|
||||||
|
///-----------------
|
||||||
|
|
||||||
|
/** Executed query */
|
||||||
|
|
||||||
|
@property (atomic, retain) NSString *query;
|
||||||
|
|
||||||
|
/** `NSMutableDictionary` mapping column names to numeric index */
|
||||||
|
|
||||||
|
@property (readonly) NSMutableDictionary *columnNameToIndexMap;
|
||||||
|
|
||||||
|
/** `FMStatement` used by result set. */
|
||||||
|
|
||||||
|
@property (atomic, retain) FMStatement *statement;
|
||||||
|
|
||||||
|
///------------------------------------
|
||||||
|
/// @name Creating and closing database
|
||||||
|
///------------------------------------
|
||||||
|
|
||||||
|
/** Create result set from `<FMStatement>`
|
||||||
|
|
||||||
|
@param statement A `<FMStatement>` to be performed
|
||||||
|
|
||||||
|
@param aDB A `<FMDatabase>` to be used
|
||||||
|
|
||||||
|
@return A `FMResultSet` on success; `nil` on failure
|
||||||
|
*/
|
||||||
|
|
||||||
|
+ (instancetype)resultSetWithStatement:(FMStatement *)statement usingParentDatabase:(FMDatabase*)aDB;
|
||||||
|
|
||||||
|
/** Close result set */
|
||||||
|
|
||||||
|
- (void)close;
|
||||||
|
|
||||||
|
- (void)setParentDB:(FMDatabase *)newDb;
|
||||||
|
|
||||||
|
///---------------------------------------
|
||||||
|
/// @name Iterating through the result set
|
||||||
|
///---------------------------------------
|
||||||
|
|
||||||
|
/** Retrieve next row for result set.
|
||||||
|
|
||||||
|
You must always invoke `next` or `nextWithError` before attempting to access the values returned in a query, even if you're only expecting one.
|
||||||
|
|
||||||
|
@return `YES` if row successfully retrieved; `NO` if end of result set reached
|
||||||
|
|
||||||
|
@see hasAnotherRow
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)next;
|
||||||
|
|
||||||
|
/** Retrieve next row for result set.
|
||||||
|
|
||||||
|
You must always invoke `next` or `nextWithError` before attempting to access the values returned in a query, even if you're only expecting one.
|
||||||
|
|
||||||
|
@param outErr A 'NSError' object to receive any error object (if any).
|
||||||
|
|
||||||
|
@return 'YES' if row successfully retrieved; 'NO' if end of result set reached
|
||||||
|
|
||||||
|
@see hasAnotherRow
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)nextWithError:(NSError **)outErr;
|
||||||
|
|
||||||
|
/** Did the last call to `<next>` succeed in retrieving another row?
|
||||||
|
|
||||||
|
@return `YES` if the last call to `<next>` succeeded in retrieving another record; `NO` if not.
|
||||||
|
|
||||||
|
@see next
|
||||||
|
|
||||||
|
@warning The `hasAnotherRow` method must follow a call to `<next>`. If the previous database interaction was something other than a call to `next`, then this method may return `NO`, whether there is another row of data or not.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)hasAnotherRow;
|
||||||
|
|
||||||
|
///---------------------------------------------
|
||||||
|
/// @name Retrieving information from result set
|
||||||
|
///---------------------------------------------
|
||||||
|
|
||||||
|
/** How many columns in result set
|
||||||
|
|
||||||
|
@return Integer value of the number of columns.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (int)columnCount;
|
||||||
|
|
||||||
|
/** Column index for column name
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return Zero-based index for column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (int)columnIndexForName:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Column name for column index
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return columnName `NSString` value of the name of the column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSString*)columnNameForIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set integer value for column.
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `int` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (int)intForColumn:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Result set integer value for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `int` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (int)intForColumnIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set `long` value for column.
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `long` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (long)longForColumn:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Result set long value for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `long` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (long)longForColumnIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set `long long int` value for column.
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `long long int` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (long long int)longLongIntForColumn:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Result set `long long int` value for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `long long int` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (long long int)longLongIntForColumnIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set `unsigned long long int` value for column.
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `unsigned long long int` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (unsigned long long int)unsignedLongLongIntForColumn:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Result set `unsigned long long int` value for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `unsigned long long int` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (unsigned long long int)unsignedLongLongIntForColumnIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set `BOOL` value for column.
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `BOOL` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)boolForColumn:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Result set `BOOL` value for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `BOOL` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)boolForColumnIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set `double` value for column.
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `double` value of the result set's column.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (double)doubleForColumn:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Result set `double` value for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `double` value of the result set's column.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (double)doubleForColumnIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set `NSString` value for column.
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `NSString` value of the result set's column.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSString*)stringForColumn:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Result set `NSString` value for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `NSString` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSString*)stringForColumnIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set `NSDate` value for column.
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `NSDate` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSDate*)dateForColumn:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Result set `NSDate` value for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `NSDate` value of the result set's column.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSDate*)dateForColumnIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set `NSData` value for column.
|
||||||
|
|
||||||
|
This is useful when storing binary data in table (such as image or the like).
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `NSData` value of the result set's column.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSData*)dataForColumn:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Result set `NSData` value for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `NSData` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSData*)dataForColumnIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set `(const unsigned char *)` value for column.
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `(const unsigned char *)` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (const unsigned char *)UTF8StringForColumnName:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Result set `(const unsigned char *)` value for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `(const unsigned char *)` value of the result set's column.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (const unsigned char *)UTF8StringForColumnIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set object for column.
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object.
|
||||||
|
|
||||||
|
@see objectForKeyedSubscript:
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (id)objectForColumnName:(NSString*)columnName;
|
||||||
|
|
||||||
|
/** Result set object for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object.
|
||||||
|
|
||||||
|
@see objectAtIndexedSubscript:
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (id)objectForColumnIndex:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set object for column.
|
||||||
|
|
||||||
|
This method allows the use of the "boxed" syntax supported in Modern Objective-C. For example, by defining this method, the following syntax is now supported:
|
||||||
|
|
||||||
|
id result = rs[@"employee_name"];
|
||||||
|
|
||||||
|
This simplified syntax is equivalent to calling:
|
||||||
|
|
||||||
|
id result = [rs objectForKeyedSubscript:@"employee_name"];
|
||||||
|
|
||||||
|
which is, it turns out, equivalent to calling:
|
||||||
|
|
||||||
|
id result = [rs objectForColumnName:@"employee_name"];
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (id)objectForKeyedSubscript:(NSString *)columnName;
|
||||||
|
|
||||||
|
/** Result set object for column.
|
||||||
|
|
||||||
|
This method allows the use of the "boxed" syntax supported in Modern Objective-C. For example, by defining this method, the following syntax is now supported:
|
||||||
|
|
||||||
|
id result = rs[0];
|
||||||
|
|
||||||
|
This simplified syntax is equivalent to calling:
|
||||||
|
|
||||||
|
id result = [rs objectForKeyedSubscript:0];
|
||||||
|
|
||||||
|
which is, it turns out, equivalent to calling:
|
||||||
|
|
||||||
|
id result = [rs objectForColumnName:0];
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (id)objectAtIndexedSubscript:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Result set `NSData` value for column.
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `NSData` value of the result set's column.
|
||||||
|
|
||||||
|
@warning If you are going to use this data after you iterate over the next row, or after you close the
|
||||||
|
result set, make sure to make a copy of the data first (or just use `<dataForColumn:>`/`<dataForColumnIndex:>`)
|
||||||
|
If you don't, you're going to be in a world of hurt when you try and use the data.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSData*)dataNoCopyForColumn:(NSString*)columnName NS_RETURNS_NOT_RETAINED;
|
||||||
|
|
||||||
|
/** Result set `NSData` value for column.
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `NSData` value of the result set's column.
|
||||||
|
|
||||||
|
@warning If you are going to use this data after you iterate over the next row, or after you close the
|
||||||
|
result set, make sure to make a copy of the data first (or just use `<dataForColumn:>`/`<dataForColumnIndex:>`)
|
||||||
|
If you don't, you're going to be in a world of hurt when you try and use the data.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSData*)dataNoCopyForColumnIndex:(int)columnIdx NS_RETURNS_NOT_RETAINED;
|
||||||
|
|
||||||
|
/** Is the column `NULL`?
|
||||||
|
|
||||||
|
@param columnIdx Zero-based index for column.
|
||||||
|
|
||||||
|
@return `YES` if column is `NULL`; `NO` if not `NULL`.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)columnIndexIsNull:(int)columnIdx;
|
||||||
|
|
||||||
|
/** Is the column `NULL`?
|
||||||
|
|
||||||
|
@param columnName `NSString` value of the name of the column.
|
||||||
|
|
||||||
|
@return `YES` if column is `NULL`; `NO` if not `NULL`.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (BOOL)columnIsNull:(NSString*)columnName;
|
||||||
|
|
||||||
|
|
||||||
|
/** Returns a dictionary of the row results mapped to case sensitive keys of the column names.
|
||||||
|
|
||||||
|
@returns `NSDictionary` of the row results.
|
||||||
|
|
||||||
|
@warning The keys to the dictionary are case sensitive of the column names.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSDictionary*)resultDictionary;
|
||||||
|
|
||||||
|
/** Returns a dictionary of the row results
|
||||||
|
|
||||||
|
@see resultDictionary
|
||||||
|
|
||||||
|
@warning **Deprecated**: Please use `<resultDictionary>` instead. Also, beware that `<resultDictionary>` is case sensitive!
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (NSDictionary*)resultDict __attribute__ ((deprecated));
|
||||||
|
|
||||||
|
///-----------------------------
|
||||||
|
/// @name Key value coding magic
|
||||||
|
///-----------------------------
|
||||||
|
|
||||||
|
/** Performs `setValue` to yield support for key value observing.
|
||||||
|
|
||||||
|
@param object The object for which the values will be set. This is the key-value-coding compliant object that you might, for example, observe.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
- (void)kvcMagic:(id)object;
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
422
ios/Pods/FMDB/src/fmdb/FMResultSet.m
generated
Normal file
422
ios/Pods/FMDB/src/fmdb/FMResultSet.m
generated
Normal file
@@ -0,0 +1,422 @@
|
|||||||
|
#import "FMResultSet.h"
|
||||||
|
#import "FMDatabase.h"
|
||||||
|
#import "unistd.h"
|
||||||
|
|
||||||
|
#if FMDB_SQLITE_STANDALONE
|
||||||
|
#import <sqlite3/sqlite3.h>
|
||||||
|
#else
|
||||||
|
#import <sqlite3.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@interface FMDatabase ()
|
||||||
|
- (void)resultSetDidClose:(FMResultSet *)resultSet;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation FMResultSet
|
||||||
|
@synthesize query=_query;
|
||||||
|
@synthesize statement=_statement;
|
||||||
|
|
||||||
|
+ (instancetype)resultSetWithStatement:(FMStatement *)statement usingParentDatabase:(FMDatabase*)aDB {
|
||||||
|
|
||||||
|
FMResultSet *rs = [[FMResultSet alloc] init];
|
||||||
|
|
||||||
|
[rs setStatement:statement];
|
||||||
|
[rs setParentDB:aDB];
|
||||||
|
|
||||||
|
NSParameterAssert(![statement inUse]);
|
||||||
|
[statement setInUse:YES]; // weak reference
|
||||||
|
|
||||||
|
return FMDBReturnAutoreleased(rs);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)finalize {
|
||||||
|
[self close];
|
||||||
|
[super finalize];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
[self close];
|
||||||
|
|
||||||
|
FMDBRelease(_query);
|
||||||
|
_query = nil;
|
||||||
|
|
||||||
|
FMDBRelease(_columnNameToIndexMap);
|
||||||
|
_columnNameToIndexMap = nil;
|
||||||
|
|
||||||
|
#if ! __has_feature(objc_arc)
|
||||||
|
[super dealloc];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)close {
|
||||||
|
[_statement reset];
|
||||||
|
FMDBRelease(_statement);
|
||||||
|
_statement = nil;
|
||||||
|
|
||||||
|
// we don't need this anymore... (i think)
|
||||||
|
//[_parentDB setInUse:NO];
|
||||||
|
[_parentDB resultSetDidClose:self];
|
||||||
|
_parentDB = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (int)columnCount {
|
||||||
|
return sqlite3_column_count([_statement statement]);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSMutableDictionary *)columnNameToIndexMap {
|
||||||
|
if (!_columnNameToIndexMap) {
|
||||||
|
int columnCount = sqlite3_column_count([_statement statement]);
|
||||||
|
_columnNameToIndexMap = [[NSMutableDictionary alloc] initWithCapacity:(NSUInteger)columnCount];
|
||||||
|
int columnIdx = 0;
|
||||||
|
for (columnIdx = 0; columnIdx < columnCount; columnIdx++) {
|
||||||
|
[_columnNameToIndexMap setObject:[NSNumber numberWithInt:columnIdx]
|
||||||
|
forKey:[[NSString stringWithUTF8String:sqlite3_column_name([_statement statement], columnIdx)] lowercaseString]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _columnNameToIndexMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)kvcMagic:(id)object {
|
||||||
|
|
||||||
|
int columnCount = sqlite3_column_count([_statement statement]);
|
||||||
|
|
||||||
|
int columnIdx = 0;
|
||||||
|
for (columnIdx = 0; columnIdx < columnCount; columnIdx++) {
|
||||||
|
|
||||||
|
const char *c = (const char *)sqlite3_column_text([_statement statement], columnIdx);
|
||||||
|
|
||||||
|
// check for a null row
|
||||||
|
if (c) {
|
||||||
|
NSString *s = [NSString stringWithUTF8String:c];
|
||||||
|
|
||||||
|
[object setValue:s forKey:[NSString stringWithUTF8String:sqlite3_column_name([_statement statement], columnIdx)]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wdeprecated-implementations"
|
||||||
|
|
||||||
|
- (NSDictionary*)resultDict {
|
||||||
|
|
||||||
|
NSUInteger num_cols = (NSUInteger)sqlite3_data_count([_statement statement]);
|
||||||
|
|
||||||
|
if (num_cols > 0) {
|
||||||
|
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:num_cols];
|
||||||
|
|
||||||
|
NSEnumerator *columnNames = [[self columnNameToIndexMap] keyEnumerator];
|
||||||
|
NSString *columnName = nil;
|
||||||
|
while ((columnName = [columnNames nextObject])) {
|
||||||
|
id objectValue = [self objectForColumnName:columnName];
|
||||||
|
[dict setObject:objectValue forKey:columnName];
|
||||||
|
}
|
||||||
|
|
||||||
|
return FMDBReturnAutoreleased([dict copy]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NSLog(@"Warning: There seem to be no columns in this set.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
|
||||||
|
- (NSDictionary*)resultDictionary {
|
||||||
|
|
||||||
|
NSUInteger num_cols = (NSUInteger)sqlite3_data_count([_statement statement]);
|
||||||
|
|
||||||
|
if (num_cols > 0) {
|
||||||
|
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:num_cols];
|
||||||
|
|
||||||
|
int columnCount = sqlite3_column_count([_statement statement]);
|
||||||
|
|
||||||
|
int columnIdx = 0;
|
||||||
|
for (columnIdx = 0; columnIdx < columnCount; columnIdx++) {
|
||||||
|
|
||||||
|
NSString *columnName = [NSString stringWithUTF8String:sqlite3_column_name([_statement statement], columnIdx)];
|
||||||
|
id objectValue = [self objectForColumnIndex:columnIdx];
|
||||||
|
[dict setObject:objectValue forKey:columnName];
|
||||||
|
}
|
||||||
|
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NSLog(@"Warning: There seem to be no columns in this set.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- (BOOL)next {
|
||||||
|
return [self nextWithError:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)nextWithError:(NSError **)outErr {
|
||||||
|
|
||||||
|
int rc = sqlite3_step([_statement statement]);
|
||||||
|
|
||||||
|
if (SQLITE_BUSY == rc || SQLITE_LOCKED == rc) {
|
||||||
|
NSLog(@"%s:%d Database busy (%@)", __FUNCTION__, __LINE__, [_parentDB databasePath]);
|
||||||
|
NSLog(@"Database busy");
|
||||||
|
if (outErr) {
|
||||||
|
*outErr = [_parentDB lastError];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (SQLITE_DONE == rc || SQLITE_ROW == rc) {
|
||||||
|
// all is well, let's return.
|
||||||
|
}
|
||||||
|
else if (SQLITE_ERROR == rc) {
|
||||||
|
NSLog(@"Error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([_parentDB sqliteHandle]));
|
||||||
|
if (outErr) {
|
||||||
|
*outErr = [_parentDB lastError];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (SQLITE_MISUSE == rc) {
|
||||||
|
// uh oh.
|
||||||
|
NSLog(@"Error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([_parentDB sqliteHandle]));
|
||||||
|
if (outErr) {
|
||||||
|
if (_parentDB) {
|
||||||
|
*outErr = [_parentDB lastError];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// If 'next' or 'nextWithError' is called after the result set is closed,
|
||||||
|
// we need to return the appropriate error.
|
||||||
|
NSDictionary* errorMessage = [NSDictionary dictionaryWithObject:@"parentDB does not exist" forKey:NSLocalizedDescriptionKey];
|
||||||
|
*outErr = [NSError errorWithDomain:@"FMDatabase" code:SQLITE_MISUSE userInfo:errorMessage];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// wtf?
|
||||||
|
NSLog(@"Unknown error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([_parentDB sqliteHandle]));
|
||||||
|
if (outErr) {
|
||||||
|
*outErr = [_parentDB lastError];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (rc != SQLITE_ROW) {
|
||||||
|
[self close];
|
||||||
|
}
|
||||||
|
|
||||||
|
return (rc == SQLITE_ROW);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)hasAnotherRow {
|
||||||
|
return sqlite3_errcode([_parentDB sqliteHandle]) == SQLITE_ROW;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (int)columnIndexForName:(NSString*)columnName {
|
||||||
|
columnName = [columnName lowercaseString];
|
||||||
|
|
||||||
|
NSNumber *n = [[self columnNameToIndexMap] objectForKey:columnName];
|
||||||
|
|
||||||
|
if (n) {
|
||||||
|
return [n intValue];
|
||||||
|
}
|
||||||
|
|
||||||
|
NSLog(@"Warning: I could not find the column named '%@'.", columnName);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- (int)intForColumn:(NSString*)columnName {
|
||||||
|
return [self intForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (int)intForColumnIndex:(int)columnIdx {
|
||||||
|
return sqlite3_column_int([_statement statement], columnIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (long)longForColumn:(NSString*)columnName {
|
||||||
|
return [self longForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (long)longForColumnIndex:(int)columnIdx {
|
||||||
|
return (long)sqlite3_column_int64([_statement statement], columnIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (long long int)longLongIntForColumn:(NSString*)columnName {
|
||||||
|
return [self longLongIntForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (long long int)longLongIntForColumnIndex:(int)columnIdx {
|
||||||
|
return sqlite3_column_int64([_statement statement], columnIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (unsigned long long int)unsignedLongLongIntForColumn:(NSString*)columnName {
|
||||||
|
return [self unsignedLongLongIntForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (unsigned long long int)unsignedLongLongIntForColumnIndex:(int)columnIdx {
|
||||||
|
return (unsigned long long int)[self longLongIntForColumnIndex:columnIdx];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)boolForColumn:(NSString*)columnName {
|
||||||
|
return [self boolForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)boolForColumnIndex:(int)columnIdx {
|
||||||
|
return ([self intForColumnIndex:columnIdx] != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (double)doubleForColumn:(NSString*)columnName {
|
||||||
|
return [self doubleForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (double)doubleForColumnIndex:(int)columnIdx {
|
||||||
|
return sqlite3_column_double([_statement statement], columnIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*)stringForColumnIndex:(int)columnIdx {
|
||||||
|
|
||||||
|
if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *c = (const char *)sqlite3_column_text([_statement statement], columnIdx);
|
||||||
|
|
||||||
|
if (!c) {
|
||||||
|
// null row.
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [NSString stringWithUTF8String:c];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*)stringForColumn:(NSString*)columnName {
|
||||||
|
return [self stringForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDate*)dateForColumn:(NSString*)columnName {
|
||||||
|
return [self dateForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDate*)dateForColumnIndex:(int)columnIdx {
|
||||||
|
|
||||||
|
if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [_parentDB hasDateFormatter] ? [_parentDB dateFromString:[self stringForColumnIndex:columnIdx]] : [NSDate dateWithTimeIntervalSince1970:[self doubleForColumnIndex:columnIdx]];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (NSData*)dataForColumn:(NSString*)columnName {
|
||||||
|
return [self dataForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSData*)dataForColumnIndex:(int)columnIdx {
|
||||||
|
|
||||||
|
if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *dataBuffer = sqlite3_column_blob([_statement statement], columnIdx);
|
||||||
|
int dataSize = sqlite3_column_bytes([_statement statement], columnIdx);
|
||||||
|
|
||||||
|
if (dataBuffer == NULL) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [NSData dataWithBytes:(const void *)dataBuffer length:(NSUInteger)dataSize];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (NSData*)dataNoCopyForColumn:(NSString*)columnName {
|
||||||
|
return [self dataNoCopyForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSData*)dataNoCopyForColumnIndex:(int)columnIdx {
|
||||||
|
|
||||||
|
if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *dataBuffer = sqlite3_column_blob([_statement statement], columnIdx);
|
||||||
|
int dataSize = sqlite3_column_bytes([_statement statement], columnIdx);
|
||||||
|
|
||||||
|
NSData *data = [NSData dataWithBytesNoCopy:(void *)dataBuffer length:(NSUInteger)dataSize freeWhenDone:NO];
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (BOOL)columnIndexIsNull:(int)columnIdx {
|
||||||
|
return sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)columnIsNull:(NSString*)columnName {
|
||||||
|
return [self columnIndexIsNull:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (const unsigned char *)UTF8StringForColumnIndex:(int)columnIdx {
|
||||||
|
|
||||||
|
if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sqlite3_column_text([_statement statement], columnIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (const unsigned char *)UTF8StringForColumnName:(NSString*)columnName {
|
||||||
|
return [self UTF8StringForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)objectForColumnIndex:(int)columnIdx {
|
||||||
|
int columnType = sqlite3_column_type([_statement statement], columnIdx);
|
||||||
|
|
||||||
|
id returnValue = nil;
|
||||||
|
|
||||||
|
if (columnType == SQLITE_INTEGER) {
|
||||||
|
returnValue = [NSNumber numberWithLongLong:[self longLongIntForColumnIndex:columnIdx]];
|
||||||
|
}
|
||||||
|
else if (columnType == SQLITE_FLOAT) {
|
||||||
|
returnValue = [NSNumber numberWithDouble:[self doubleForColumnIndex:columnIdx]];
|
||||||
|
}
|
||||||
|
else if (columnType == SQLITE_BLOB) {
|
||||||
|
returnValue = [self dataForColumnIndex:columnIdx];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//default to a string for everything else
|
||||||
|
returnValue = [self stringForColumnIndex:columnIdx];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (returnValue == nil) {
|
||||||
|
returnValue = [NSNull null];
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)objectForColumnName:(NSString*)columnName {
|
||||||
|
return [self objectForColumnIndex:[self columnIndexForName:columnName]];
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns autoreleased NSString containing the name of the column in the result set
|
||||||
|
- (NSString*)columnNameForIndex:(int)columnIdx {
|
||||||
|
return [NSString stringWithUTF8String: sqlite3_column_name([_statement statement], columnIdx)];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setParentDB:(FMDatabase *)newDb {
|
||||||
|
_parentDB = newDb;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)objectAtIndexedSubscript:(int)columnIdx {
|
||||||
|
return [self objectForColumnIndex:columnIdx];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)objectForKeyedSubscript:(NSString *)columnName {
|
||||||
|
return [self objectForColumnName:columnName];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
1
ios/Pods/Headers/Private/FMDB/FMDB.h
generated
Symbolic link
1
ios/Pods/Headers/Private/FMDB/FMDB.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMDB.h
|
||||||
1
ios/Pods/Headers/Private/FMDB/FMDatabase.h
generated
Symbolic link
1
ios/Pods/Headers/Private/FMDB/FMDatabase.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMDatabase.h
|
||||||
1
ios/Pods/Headers/Private/FMDB/FMDatabaseAdditions.h
generated
Symbolic link
1
ios/Pods/Headers/Private/FMDB/FMDatabaseAdditions.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMDatabaseAdditions.h
|
||||||
1
ios/Pods/Headers/Private/FMDB/FMDatabasePool.h
generated
Symbolic link
1
ios/Pods/Headers/Private/FMDB/FMDatabasePool.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMDatabasePool.h
|
||||||
1
ios/Pods/Headers/Private/FMDB/FMDatabaseQueue.h
generated
Symbolic link
1
ios/Pods/Headers/Private/FMDB/FMDatabaseQueue.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMDatabaseQueue.h
|
||||||
1
ios/Pods/Headers/Private/FMDB/FMResultSet.h
generated
Symbolic link
1
ios/Pods/Headers/Private/FMDB/FMResultSet.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMResultSet.h
|
||||||
1
ios/Pods/Headers/Private/path_provider/PathProviderPlugin.h
generated
Symbolic link
1
ios/Pods/Headers/Private/path_provider/PathProviderPlugin.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../.pub-cache/hosted/pub.dartlang.org/path_provider-0.2.1+1/ios/Classes/PathProviderPlugin.h
|
||||||
1
ios/Pods/Headers/Private/sqflite/SqflitePlugin.h
generated
Symbolic link
1
ios/Pods/Headers/Private/sqflite/SqflitePlugin.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../.pub-cache/hosted/pub.dartlang.org/sqflite-0.2.3/ios/Classes/SqflitePlugin.h
|
||||||
1
ios/Pods/Headers/Public/FMDB/FMDB.h
generated
Symbolic link
1
ios/Pods/Headers/Public/FMDB/FMDB.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMDB.h
|
||||||
1
ios/Pods/Headers/Public/FMDB/FMDatabase.h
generated
Symbolic link
1
ios/Pods/Headers/Public/FMDB/FMDatabase.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMDatabase.h
|
||||||
1
ios/Pods/Headers/Public/FMDB/FMDatabaseAdditions.h
generated
Symbolic link
1
ios/Pods/Headers/Public/FMDB/FMDatabaseAdditions.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMDatabaseAdditions.h
|
||||||
1
ios/Pods/Headers/Public/FMDB/FMDatabasePool.h
generated
Symbolic link
1
ios/Pods/Headers/Public/FMDB/FMDatabasePool.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMDatabasePool.h
|
||||||
1
ios/Pods/Headers/Public/FMDB/FMDatabaseQueue.h
generated
Symbolic link
1
ios/Pods/Headers/Public/FMDB/FMDatabaseQueue.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMDatabaseQueue.h
|
||||||
1
ios/Pods/Headers/Public/FMDB/FMResultSet.h
generated
Symbolic link
1
ios/Pods/Headers/Public/FMDB/FMResultSet.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../FMDB/src/fmdb/FMResultSet.h
|
||||||
1
ios/Pods/Headers/Public/Flutter/Flutter/Flutter.h
generated
Symbolic link
1
ios/Pods/Headers/Public/Flutter/Flutter/Flutter.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework/Headers/Flutter.h
|
||||||
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterAppDelegate.h
generated
Symbolic link
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterAppDelegate.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework/Headers/FlutterAppDelegate.h
|
||||||
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterBinaryMessenger.h
generated
Symbolic link
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterBinaryMessenger.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework/Headers/FlutterBinaryMessenger.h
|
||||||
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterChannels.h
generated
Symbolic link
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterChannels.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework/Headers/FlutterChannels.h
|
||||||
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterCodecs.h
generated
Symbolic link
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterCodecs.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework/Headers/FlutterCodecs.h
|
||||||
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterDartProject.h
generated
Symbolic link
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterDartProject.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework/Headers/FlutterDartProject.h
|
||||||
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterMacros.h
generated
Symbolic link
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterMacros.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework/Headers/FlutterMacros.h
|
||||||
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterNavigationController.h
generated
Symbolic link
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterNavigationController.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework/Headers/FlutterNavigationController.h
|
||||||
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterPlugin.h
generated
Symbolic link
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterPlugin.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework/Headers/FlutterPlugin.h
|
||||||
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterViewController.h
generated
Symbolic link
1
ios/Pods/Headers/Public/Flutter/Flutter/FlutterViewController.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework/Headers/FlutterViewController.h
|
||||||
1
ios/Pods/Headers/Public/path_provider/PathProviderPlugin.h
generated
Symbolic link
1
ios/Pods/Headers/Public/path_provider/PathProviderPlugin.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../.pub-cache/hosted/pub.dartlang.org/path_provider-0.2.1+1/ios/Classes/PathProviderPlugin.h
|
||||||
1
ios/Pods/Headers/Public/sqflite/SqflitePlugin.h
generated
Symbolic link
1
ios/Pods/Headers/Public/sqflite/SqflitePlugin.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../../../../.pub-cache/hosted/pub.dartlang.org/sqflite-0.2.3/ios/Classes/SqflitePlugin.h
|
||||||
22
ios/Pods/Local Podspecs/Flutter.podspec.json
generated
Normal file
22
ios/Pods/Local Podspecs/Flutter.podspec.json
generated
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"name": "Flutter",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"summary": "High-performance, high-fidelity mobile apps.",
|
||||||
|
"description": "Flutter provides an easy and productive way to build and deploy high-performance mobile apps for Android and iOS.",
|
||||||
|
"homepage": "https://flutter.io",
|
||||||
|
"license": {
|
||||||
|
"type": "MIT",
|
||||||
|
"file": "../../../../../LICENSE"
|
||||||
|
},
|
||||||
|
"authors": {
|
||||||
|
"Flutter Dev Team": "flutter-dev@googlegroups.com"
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"git": "https://github.com/flutter/engine",
|
||||||
|
"tag": "1.0.0"
|
||||||
|
},
|
||||||
|
"platforms": {
|
||||||
|
"ios": "7.0"
|
||||||
|
},
|
||||||
|
"vendored_frameworks": "Flutter.framework"
|
||||||
|
}
|
||||||
26
ios/Pods/Local Podspecs/path_provider.podspec.json
generated
Normal file
26
ios/Pods/Local Podspecs/path_provider.podspec.json
generated
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": "path_provider",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"summary": "A Flutter plugin for getting commonly used locations on the filesystem.",
|
||||||
|
"description": "A Flutter plugin for getting commonly used locations on the filesystem.",
|
||||||
|
"homepage": "https://github.com/flutter/plugins/tree/master/packages/path_provider",
|
||||||
|
"license": {
|
||||||
|
"file": "../LICENSE"
|
||||||
|
},
|
||||||
|
"authors": {
|
||||||
|
"Flutter Team": "flutter-dev@googlegroups.com"
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"path": "."
|
||||||
|
},
|
||||||
|
"source_files": "Classes/**/*",
|
||||||
|
"public_header_files": "Classes/**/*.h",
|
||||||
|
"dependencies": {
|
||||||
|
"Flutter": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"platforms": {
|
||||||
|
"ios": "8.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
29
ios/Pods/Local Podspecs/sqflite.podspec.json
generated
Normal file
29
ios/Pods/Local Podspecs/sqflite.podspec.json
generated
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"name": "sqflite",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"summary": "A new flutter plugin project.",
|
||||||
|
"description": "A new flutter plugin project.",
|
||||||
|
"homepage": "http://example.com",
|
||||||
|
"license": {
|
||||||
|
"file": "../LICENSE"
|
||||||
|
},
|
||||||
|
"authors": {
|
||||||
|
"Your Company": "email@example.com"
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"path": "."
|
||||||
|
},
|
||||||
|
"source_files": "Classes/**/*",
|
||||||
|
"public_header_files": "Classes/**/*.h",
|
||||||
|
"dependencies": {
|
||||||
|
"Flutter": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"FMDB": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"platforms": {
|
||||||
|
"ios": "8.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
33
ios/Pods/Manifest.lock
generated
Normal file
33
ios/Pods/Manifest.lock
generated
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
PODS:
|
||||||
|
- Flutter (1.0.0)
|
||||||
|
- FMDB (2.6.2):
|
||||||
|
- FMDB/standard (= 2.6.2)
|
||||||
|
- FMDB/standard (2.6.2)
|
||||||
|
- path_provider (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- sqflite (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- FMDB
|
||||||
|
|
||||||
|
DEPENDENCIES:
|
||||||
|
- Flutter (from `/Users/ntrlab/flutter/bin/cache/artifacts/engine/ios`)
|
||||||
|
- path_provider (from `/Users/ntrlab/.pub-cache/hosted/pub.dartlang.org/path_provider-0.2.1+1/ios`)
|
||||||
|
- sqflite (from `/Users/ntrlab/.pub-cache/hosted/pub.dartlang.org/sqflite-0.2.3/ios`)
|
||||||
|
|
||||||
|
EXTERNAL SOURCES:
|
||||||
|
Flutter:
|
||||||
|
:path: /Users/ntrlab/flutter/bin/cache/artifacts/engine/ios
|
||||||
|
path_provider:
|
||||||
|
:path: /Users/ntrlab/.pub-cache/hosted/pub.dartlang.org/path_provider-0.2.1+1/ios
|
||||||
|
sqflite:
|
||||||
|
:path: /Users/ntrlab/.pub-cache/hosted/pub.dartlang.org/sqflite-0.2.3/ios
|
||||||
|
|
||||||
|
SPEC CHECKSUMS:
|
||||||
|
Flutter: d674e78c937094a75ac71dd77e921e840bea3dbf
|
||||||
|
FMDB: 854a0341b4726e53276f2a8996f06f1b80f9259a
|
||||||
|
path_provider: f96fff6166a8867510d2c25fdcc346327cc4b259
|
||||||
|
sqflite: 8e2d9fe1e7cdc95d4d537fc7eb2d23c8dc428e3c
|
||||||
|
|
||||||
|
PODFILE CHECKSUM: 351e02e34b831289961ec3558a535cbd2c4965d2
|
||||||
|
|
||||||
|
COCOAPODS: 1.2.1
|
||||||
1108
ios/Pods/Pods.xcodeproj/project.pbxproj
generated
Normal file
1108
ios/Pods/Pods.xcodeproj/project.pbxproj
generated
Normal file
File diff suppressed because it is too large
Load Diff
60
ios/Pods/Pods.xcodeproj/xcuserdata/ntrlab.xcuserdatad/xcschemes/FMDB.xcscheme
generated
Normal file
60
ios/Pods/Pods.xcodeproj/xcuserdata/ntrlab.xcuserdatad/xcschemes/FMDB.xcscheme
generated
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "0700"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForAnalyzing = "YES"
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = 'primary'
|
||||||
|
BlueprintIdentifier = '1749C1BD4B48236EAC7E2B8B03365028'
|
||||||
|
BlueprintName = 'FMDB'
|
||||||
|
ReferencedContainer = 'container:Pods.xcodeproj'
|
||||||
|
BuildableName = 'libFMDB.a'>
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
60
ios/Pods/Pods.xcodeproj/xcuserdata/ntrlab.xcuserdatad/xcschemes/Pods-Runner.xcscheme
generated
Normal file
60
ios/Pods/Pods.xcodeproj/xcuserdata/ntrlab.xcuserdatad/xcschemes/Pods-Runner.xcscheme
generated
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "0700"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForAnalyzing = "YES"
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = 'primary'
|
||||||
|
BlueprintIdentifier = '4359B870C8D9828950479A4FB3819805'
|
||||||
|
BlueprintName = 'Pods-Runner'
|
||||||
|
ReferencedContainer = 'container:Pods.xcodeproj'
|
||||||
|
BuildableName = 'libPods-Runner.a'>
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
60
ios/Pods/Pods.xcodeproj/xcuserdata/ntrlab.xcuserdatad/xcschemes/path_provider.xcscheme
generated
Normal file
60
ios/Pods/Pods.xcodeproj/xcuserdata/ntrlab.xcuserdatad/xcschemes/path_provider.xcscheme
generated
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "0700"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForAnalyzing = "YES"
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = 'primary'
|
||||||
|
BlueprintIdentifier = 'D597B65EAF1279E7C5637291B916DDC5'
|
||||||
|
BlueprintName = 'path_provider'
|
||||||
|
ReferencedContainer = 'container:Pods.xcodeproj'
|
||||||
|
BuildableName = 'libpath_provider.a'>
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
60
ios/Pods/Pods.xcodeproj/xcuserdata/ntrlab.xcuserdatad/xcschemes/sqflite.xcscheme
generated
Normal file
60
ios/Pods/Pods.xcodeproj/xcuserdata/ntrlab.xcuserdatad/xcschemes/sqflite.xcscheme
generated
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "0700"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForAnalyzing = "YES"
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = 'primary'
|
||||||
|
BlueprintIdentifier = '8944BF05BFD79D97D838CC043D5F737A'
|
||||||
|
BlueprintName = 'sqflite'
|
||||||
|
ReferencedContainer = 'container:Pods.xcodeproj'
|
||||||
|
BuildableName = 'libsqflite.a'>
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
31
ios/Pods/Pods.xcodeproj/xcuserdata/ntrlab.xcuserdatad/xcschemes/xcschememanagement.plist
generated
Normal file
31
ios/Pods/Pods.xcodeproj/xcuserdata/ntrlab.xcuserdatad/xcschemes/xcschememanagement.plist
generated
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>SchemeUserState</key>
|
||||||
|
<dict>
|
||||||
|
<key>FMDB.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>isShown</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<key>Pods-Runner.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>isShown</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<key>path_provider.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>isShown</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<key>sqflite.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>isShown</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>SuppressBuildableAutocreation</key>
|
||||||
|
<dict/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
5
ios/Pods/Target Support Files/FMDB/FMDB-dummy.m
generated
Normal file
5
ios/Pods/Target Support Files/FMDB/FMDB-dummy.m
generated
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
@interface PodsDummy_FMDB : NSObject
|
||||||
|
@end
|
||||||
|
@implementation PodsDummy_FMDB
|
||||||
|
@end
|
||||||
12
ios/Pods/Target Support Files/FMDB/FMDB-prefix.pch
generated
Normal file
12
ios/Pods/Target Support Files/FMDB/FMDB-prefix.pch
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#else
|
||||||
|
#ifndef FOUNDATION_EXPORT
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define FOUNDATION_EXPORT extern "C"
|
||||||
|
#else
|
||||||
|
#define FOUNDATION_EXPORT extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
10
ios/Pods/Target Support Files/FMDB/FMDB.xcconfig
generated
Normal file
10
ios/Pods/Target Support Files/FMDB/FMDB.xcconfig
generated
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FMDB
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FMDB" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/Flutter" "${PODS_ROOT}/Headers/Public/path_provider" "${PODS_ROOT}/Headers/Public/sqflite"
|
||||||
|
OTHER_LDFLAGS = -l"sqlite3"
|
||||||
|
PODS_BUILD_DIR = $BUILD_DIR
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_ROOT = ${SRCROOT}
|
||||||
|
PODS_TARGET_SRCROOT = ${PODS_ROOT}/FMDB
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||||
|
SKIP_INSTALL = YES
|
||||||
125
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-acknowledgements.markdown
generated
Normal file
125
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-acknowledgements.markdown
generated
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
# Acknowledgements
|
||||||
|
This application makes use of the following third party libraries:
|
||||||
|
|
||||||
|
## FMDB
|
||||||
|
|
||||||
|
If you are using FMDB in your project, I'd love to hear about it. Let Gus know
|
||||||
|
by sending an email to gus@flyingmeat.com.
|
||||||
|
|
||||||
|
And if you happen to come across either Gus Mueller or Rob Ryan in a bar, you
|
||||||
|
might consider purchasing a drink of their choosing if FMDB has been useful to
|
||||||
|
you.
|
||||||
|
|
||||||
|
Finally, and shortly, this is the MIT License.
|
||||||
|
|
||||||
|
Copyright (c) 2008-2014 Flying Meat Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
## Flutter
|
||||||
|
|
||||||
|
// Copyright 2014 The Chromium Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
## path_provider
|
||||||
|
|
||||||
|
Copyright 2017, the Flutter project authors. All rights reserved.
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following
|
||||||
|
disclaimer in the documentation and/or other materials provided
|
||||||
|
with the distribution.
|
||||||
|
* Neither the name of Google Inc. nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
## sqflite
|
||||||
|
|
||||||
|
// Copyright 2017 Your Company. All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Your Company nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
Generated by CocoaPods - https://cocoapods.org
|
||||||
171
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-acknowledgements.plist
generated
Normal file
171
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-acknowledgements.plist
generated
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>PreferenceSpecifiers</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>This application makes use of the following third party libraries:</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>Acknowledgements</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>If you are using FMDB in your project, I'd love to hear about it. Let Gus know
|
||||||
|
by sending an email to gus@flyingmeat.com.
|
||||||
|
|
||||||
|
And if you happen to come across either Gus Mueller or Rob Ryan in a bar, you
|
||||||
|
might consider purchasing a drink of their choosing if FMDB has been useful to
|
||||||
|
you.
|
||||||
|
|
||||||
|
Finally, and shortly, this is the MIT License.
|
||||||
|
|
||||||
|
Copyright (c) 2008-2014 Flying Meat Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.</string>
|
||||||
|
<key>License</key>
|
||||||
|
<string>MIT</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>FMDB</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>// Copyright 2014 The Chromium Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
</string>
|
||||||
|
<key>License</key>
|
||||||
|
<string>MIT</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>Flutter</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>Copyright 2017, the Flutter project authors. All rights reserved.
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following
|
||||||
|
disclaimer in the documentation and/or other materials provided
|
||||||
|
with the distribution.
|
||||||
|
* Neither the name of Google Inc. nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>path_provider</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>// Copyright 2017 Your Company. All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Your Company nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>sqflite</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>Generated by CocoaPods - https://cocoapods.org</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string></string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>StringsTable</key>
|
||||||
|
<string>Acknowledgements</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>Acknowledgements</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
5
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-dummy.m
generated
Normal file
5
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-dummy.m
generated
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
@interface PodsDummy_Pods_Runner : NSObject
|
||||||
|
@end
|
||||||
|
@implementation PodsDummy_Pods_Runner
|
||||||
|
@end
|
||||||
102
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh
generated
Executable file
102
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh
generated
Executable file
@@ -0,0 +1,102 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
||||||
|
mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
||||||
|
|
||||||
|
SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
|
||||||
|
|
||||||
|
install_framework()
|
||||||
|
{
|
||||||
|
if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
|
||||||
|
local source="${BUILT_PRODUCTS_DIR}/$1"
|
||||||
|
elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
|
||||||
|
local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
|
||||||
|
elif [ -r "$1" ]; then
|
||||||
|
local source="$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
||||||
|
|
||||||
|
if [ -L "${source}" ]; then
|
||||||
|
echo "Symlinked..."
|
||||||
|
source="$(readlink "${source}")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# use filter instead of exclude so missing patterns dont' throw errors
|
||||||
|
echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
|
||||||
|
rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
|
||||||
|
|
||||||
|
local basename
|
||||||
|
basename="$(basename -s .framework "$1")"
|
||||||
|
binary="${destination}/${basename}.framework/${basename}"
|
||||||
|
if ! [ -r "$binary" ]; then
|
||||||
|
binary="${destination}/${basename}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Strip invalid architectures so "fat" simulator / device frameworks work on device
|
||||||
|
if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
|
||||||
|
strip_invalid_archs "$binary"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Resign the code if required by the build settings to avoid unstable apps
|
||||||
|
code_sign_if_enabled "${destination}/$(basename "$1")"
|
||||||
|
|
||||||
|
# Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
|
||||||
|
if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
|
||||||
|
local swift_runtime_libs
|
||||||
|
swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]})
|
||||||
|
for lib in $swift_runtime_libs; do
|
||||||
|
echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
|
||||||
|
rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
|
||||||
|
code_sign_if_enabled "${destination}/${lib}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Signs a framework with the provided identity
|
||||||
|
code_sign_if_enabled() {
|
||||||
|
if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
|
||||||
|
# Use the current code_sign_identitiy
|
||||||
|
echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
|
||||||
|
local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'"
|
||||||
|
|
||||||
|
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
|
||||||
|
code_sign_cmd="$code_sign_cmd &"
|
||||||
|
fi
|
||||||
|
echo "$code_sign_cmd"
|
||||||
|
eval "$code_sign_cmd"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Strip invalid architectures
|
||||||
|
strip_invalid_archs() {
|
||||||
|
binary="$1"
|
||||||
|
# Get architectures for current file
|
||||||
|
archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)"
|
||||||
|
stripped=""
|
||||||
|
for arch in $archs; do
|
||||||
|
if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then
|
||||||
|
# Strip non-valid architectures in-place
|
||||||
|
lipo -remove "$arch" -output "$binary" "$binary" || exit 1
|
||||||
|
stripped="$stripped $arch"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [[ "$stripped" ]]; then
|
||||||
|
echo "Stripped $binary of architectures:$stripped"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [[ "$CONFIGURATION" == "Debug" ]]; then
|
||||||
|
install_framework "${PODS_ROOT}/../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework"
|
||||||
|
fi
|
||||||
|
if [[ "$CONFIGURATION" == "Debug-develop" ]]; then
|
||||||
|
install_framework "${PODS_ROOT}/../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework"
|
||||||
|
fi
|
||||||
|
if [[ "$CONFIGURATION" == "Release" ]]; then
|
||||||
|
install_framework "${PODS_ROOT}/../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework"
|
||||||
|
fi
|
||||||
|
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
|
||||||
|
wait
|
||||||
|
fi
|
||||||
102
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-resources.sh
generated
Executable file
102
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-resources.sh
generated
Executable file
@@ -0,0 +1,102 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
|
||||||
|
|
||||||
|
RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
|
||||||
|
> "$RESOURCES_TO_COPY"
|
||||||
|
|
||||||
|
XCASSET_FILES=()
|
||||||
|
|
||||||
|
case "${TARGETED_DEVICE_FAMILY}" in
|
||||||
|
1,2)
|
||||||
|
TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
TARGET_DEVICE_ARGS="--target-device iphone"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
TARGET_DEVICE_ARGS="--target-device ipad"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
TARGET_DEVICE_ARGS="--target-device tv"
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
TARGET_DEVICE_ARGS="--target-device watch"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
TARGET_DEVICE_ARGS="--target-device mac"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
install_resource()
|
||||||
|
{
|
||||||
|
if [[ "$1" = /* ]] ; then
|
||||||
|
RESOURCE_PATH="$1"
|
||||||
|
else
|
||||||
|
RESOURCE_PATH="${PODS_ROOT}/$1"
|
||||||
|
fi
|
||||||
|
if [[ ! -e "$RESOURCE_PATH" ]] ; then
|
||||||
|
cat << EOM
|
||||||
|
error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
|
||||||
|
EOM
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
case $RESOURCE_PATH in
|
||||||
|
*.storyboard)
|
||||||
|
echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}"
|
||||||
|
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
|
||||||
|
;;
|
||||||
|
*.xib)
|
||||||
|
echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}"
|
||||||
|
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
|
||||||
|
;;
|
||||||
|
*.framework)
|
||||||
|
echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
||||||
|
mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
||||||
|
echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
||||||
|
rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
||||||
|
;;
|
||||||
|
*.xcdatamodel)
|
||||||
|
echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\""
|
||||||
|
xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
|
||||||
|
;;
|
||||||
|
*.xcdatamodeld)
|
||||||
|
echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\""
|
||||||
|
xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
|
||||||
|
;;
|
||||||
|
*.xcmappingmodel)
|
||||||
|
echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\""
|
||||||
|
xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
|
||||||
|
;;
|
||||||
|
*.xcassets)
|
||||||
|
ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
|
||||||
|
XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "$RESOURCE_PATH"
|
||||||
|
echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
|
||||||
|
rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
|
||||||
|
if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
|
||||||
|
mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
|
||||||
|
rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
|
||||||
|
fi
|
||||||
|
rm -f "$RESOURCES_TO_COPY"
|
||||||
|
|
||||||
|
if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ]
|
||||||
|
then
|
||||||
|
# Find all other xcassets (this unfortunately includes those of path pods and other targets).
|
||||||
|
OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
|
||||||
|
while read line; do
|
||||||
|
if [[ $line != "${PODS_ROOT}*" ]]; then
|
||||||
|
XCASSET_FILES+=("$line")
|
||||||
|
fi
|
||||||
|
done <<<"$OTHER_XCASSETS"
|
||||||
|
|
||||||
|
printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
|
||||||
|
fi
|
||||||
11
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner.debug-develop.xcconfig
generated
Normal file
11
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner.debug-develop.xcconfig
generated
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../../../../flutter/bin/cache/artifacts/engine/ios"
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/Flutter" "${PODS_ROOT}/Headers/Public/path_provider" "${PODS_ROOT}/Headers/Public/sqflite"
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
|
||||||
|
LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FMDB" "$PODS_CONFIGURATION_BUILD_DIR/path_provider" "$PODS_CONFIGURATION_BUILD_DIR/sqflite"
|
||||||
|
OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/FMDB" -isystem "${PODS_ROOT}/Headers/Public/Flutter" -isystem "${PODS_ROOT}/Headers/Public/path_provider" -isystem "${PODS_ROOT}/Headers/Public/sqflite"
|
||||||
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"FMDB" -l"path_provider" -l"sqflite" -l"sqlite3" -framework "Flutter"
|
||||||
|
PODS_BUILD_DIR = $BUILD_DIR
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
||||||
|
PODS_ROOT = ${SRCROOT}/Pods
|
||||||
11
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig
generated
Normal file
11
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig
generated
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../../../../flutter/bin/cache/artifacts/engine/ios"
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/Flutter" "${PODS_ROOT}/Headers/Public/path_provider" "${PODS_ROOT}/Headers/Public/sqflite"
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
|
||||||
|
LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FMDB" "$PODS_CONFIGURATION_BUILD_DIR/path_provider" "$PODS_CONFIGURATION_BUILD_DIR/sqflite"
|
||||||
|
OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/FMDB" -isystem "${PODS_ROOT}/Headers/Public/Flutter" -isystem "${PODS_ROOT}/Headers/Public/path_provider" -isystem "${PODS_ROOT}/Headers/Public/sqflite"
|
||||||
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"FMDB" -l"path_provider" -l"sqflite" -l"sqlite3" -framework "Flutter"
|
||||||
|
PODS_BUILD_DIR = $BUILD_DIR
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
||||||
|
PODS_ROOT = ${SRCROOT}/Pods
|
||||||
11
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig
generated
Normal file
11
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig
generated
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../../../../flutter/bin/cache/artifacts/engine/ios"
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/Flutter" "${PODS_ROOT}/Headers/Public/path_provider" "${PODS_ROOT}/Headers/Public/sqflite"
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
|
||||||
|
LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FMDB" "$PODS_CONFIGURATION_BUILD_DIR/path_provider" "$PODS_CONFIGURATION_BUILD_DIR/sqflite"
|
||||||
|
OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/FMDB" -isystem "${PODS_ROOT}/Headers/Public/Flutter" -isystem "${PODS_ROOT}/Headers/Public/path_provider" -isystem "${PODS_ROOT}/Headers/Public/sqflite"
|
||||||
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"FMDB" -l"path_provider" -l"sqflite" -l"sqlite3" -framework "Flutter"
|
||||||
|
PODS_BUILD_DIR = $BUILD_DIR
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
||||||
|
PODS_ROOT = ${SRCROOT}/Pods
|
||||||
5
ios/Pods/Target Support Files/path_provider/path_provider-dummy.m
generated
Normal file
5
ios/Pods/Target Support Files/path_provider/path_provider-dummy.m
generated
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
@interface PodsDummy_path_provider : NSObject
|
||||||
|
@end
|
||||||
|
@implementation PodsDummy_path_provider
|
||||||
|
@end
|
||||||
12
ios/Pods/Target Support Files/path_provider/path_provider-prefix.pch
generated
Normal file
12
ios/Pods/Target Support Files/path_provider/path_provider-prefix.pch
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#else
|
||||||
|
#ifndef FOUNDATION_EXPORT
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define FOUNDATION_EXPORT extern "C"
|
||||||
|
#else
|
||||||
|
#define FOUNDATION_EXPORT extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
9
ios/Pods/Target Support Files/path_provider/path_provider.xcconfig
generated
Normal file
9
ios/Pods/Target Support Files/path_provider/path_provider.xcconfig
generated
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/path_provider
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/path_provider" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/Flutter" "${PODS_ROOT}/Headers/Public/path_provider" "${PODS_ROOT}/Headers/Public/sqflite"
|
||||||
|
PODS_BUILD_DIR = $BUILD_DIR
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_ROOT = ${SRCROOT}
|
||||||
|
PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../../../.pub-cache/hosted/pub.dartlang.org/path_provider-0.2.1+1/ios
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||||
|
SKIP_INSTALL = YES
|
||||||
5
ios/Pods/Target Support Files/sqflite/sqflite-dummy.m
generated
Normal file
5
ios/Pods/Target Support Files/sqflite/sqflite-dummy.m
generated
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
@interface PodsDummy_sqflite : NSObject
|
||||||
|
@end
|
||||||
|
@implementation PodsDummy_sqflite
|
||||||
|
@end
|
||||||
12
ios/Pods/Target Support Files/sqflite/sqflite-prefix.pch
generated
Normal file
12
ios/Pods/Target Support Files/sqflite/sqflite-prefix.pch
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#else
|
||||||
|
#ifndef FOUNDATION_EXPORT
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define FOUNDATION_EXPORT extern "C"
|
||||||
|
#else
|
||||||
|
#define FOUNDATION_EXPORT extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
10
ios/Pods/Target Support Files/sqflite/sqflite.xcconfig
generated
Normal file
10
ios/Pods/Target Support Files/sqflite/sqflite.xcconfig
generated
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/sqflite
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/sqflite" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/Flutter" "${PODS_ROOT}/Headers/Public/path_provider" "${PODS_ROOT}/Headers/Public/sqflite"
|
||||||
|
LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FMDB"
|
||||||
|
PODS_BUILD_DIR = $BUILD_DIR
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_ROOT = ${SRCROOT}
|
||||||
|
PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../../../.pub-cache/hosted/pub.dartlang.org/sqflite-0.2.3/ios
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||||
|
SKIP_INSTALL = YES
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
|
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
|
||||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
|
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
|
||||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
||||||
|
ACE103AC1F8FCC6000D17794 /* libzbar.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ACE103AB1F8FCC6000D17794 /* libzbar.a */; };
|
||||||
BBA9BAFF1F176DD10053B6EA /* ScannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA9BAFE1F176DD10053B6EA /* ScannerViewController.swift */; };
|
BBA9BAFF1F176DD10053B6EA /* ScannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA9BAFE1F176DD10053B6EA /* ScannerViewController.swift */; };
|
||||||
BBA9BB321F1792570053B6EA /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB311F1792570053B6EA /* AVFoundation.framework */; };
|
BBA9BB321F1792570053B6EA /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB311F1792570053B6EA /* AVFoundation.framework */; };
|
||||||
BBA9BB341F17925F0053B6EA /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB331F17925F0053B6EA /* CoreGraphics.framework */; };
|
BBA9BB341F17925F0053B6EA /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB331F17925F0053B6EA /* CoreGraphics.framework */; };
|
||||||
@@ -29,11 +30,6 @@
|
|||||||
BBA9BB381F1792730053B6EA /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB371F1792730053B6EA /* CoreAudio.framework */; };
|
BBA9BB381F1792730053B6EA /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB371F1792730053B6EA /* CoreAudio.framework */; };
|
||||||
BBA9BB3A1F17927C0053B6EA /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB391F17927C0053B6EA /* CoreVideo.framework */; };
|
BBA9BB3A1F17927C0053B6EA /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB391F17927C0053B6EA /* CoreVideo.framework */; };
|
||||||
BBA9BB3C1F1792A90053B6EA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB3B1F1792A90053B6EA /* QuartzCore.framework */; };
|
BBA9BB3C1F1792A90053B6EA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB3B1F1792A90053B6EA /* QuartzCore.framework */; };
|
||||||
BBA9BB5B1F179C320053B6EA /* libzbar.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB551F179C320053B6EA /* libzbar.a */; };
|
|
||||||
BBA9BB5C1F179C320053B6EA /* zbar-back.png in Resources */ = {isa = PBXBuildFile; fileRef = BBA9BB571F179C320053B6EA /* zbar-back.png */; };
|
|
||||||
BBA9BB5D1F179C320053B6EA /* zbar-help.html in Resources */ = {isa = PBXBuildFile; fileRef = BBA9BB581F179C320053B6EA /* zbar-help.html */; };
|
|
||||||
BBA9BB5E1F179C320053B6EA /* zbar-helpicons.png in Resources */ = {isa = PBXBuildFile; fileRef = BBA9BB591F179C320053B6EA /* zbar-helpicons.png */; };
|
|
||||||
BBA9BB5F1F179C320053B6EA /* zbar-samples.png in Resources */ = {isa = PBXBuildFile; fileRef = BBA9BB5A1F179C320053B6EA /* zbar-samples.png */; };
|
|
||||||
BBA9BB611F179D270053B6EA /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB601F179D270053B6EA /* libiconv.tbd */; };
|
BBA9BB611F179D270053B6EA /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA9BB601F179D270053B6EA /* libiconv.tbd */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
@@ -71,6 +67,27 @@
|
|||||||
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
ACE103AB1F8FCC6000D17794 /* libzbar.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libzbar.a; path = ZBarSDK/libzbar.a; sourceTree = "<group>"; };
|
||||||
|
ACE103AD1F8FCC6F00D17794 /* zbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zbar.h; path = ZBarSDK/Headers/zbar.h; sourceTree = "<group>"; };
|
||||||
|
ACE103AE1F8FCC6F00D17794 /* ZBarCaptureReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZBarCaptureReader.h; path = ZBarSDK/Headers/ZBarCaptureReader.h; sourceTree = "<group>"; };
|
||||||
|
ACE103AF1F8FCC6F00D17794 /* ZBarReaderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZBarReaderViewController.h; path = ZBarSDK/Headers/ZBarReaderViewController.h; sourceTree = "<group>"; };
|
||||||
|
ACE103B01F8FCC6F00D17794 /* ZBarImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZBarImage.h; path = ZBarSDK/Headers/ZBarImage.h; sourceTree = "<group>"; };
|
||||||
|
ACE103B11F8FCC7000D17794 /* ZBarCameraSimulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZBarCameraSimulator.h; path = ZBarSDK/Headers/ZBarCameraSimulator.h; sourceTree = "<group>"; };
|
||||||
|
ACE103B21F8FCC7000D17794 /* ZBarReaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZBarReaderView.h; path = ZBarSDK/Headers/ZBarReaderView.h; sourceTree = "<group>"; };
|
||||||
|
ACE103B31F8FCC7000D17794 /* ZBarSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZBarSDK.h; path = ZBarSDK/Headers/ZBarSDK.h; sourceTree = "<group>"; };
|
||||||
|
ACE103B41F8FCC7000D17794 /* ZBarHelpController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZBarHelpController.h; path = ZBarSDK/Headers/ZBarHelpController.h; sourceTree = "<group>"; };
|
||||||
|
ACE103B51F8FCC7000D17794 /* ZBarImageScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZBarImageScanner.h; path = ZBarSDK/Headers/ZBarImageScanner.h; sourceTree = "<group>"; };
|
||||||
|
ACE103B61F8FCC7100D17794 /* ZBarReaderController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZBarReaderController.h; path = ZBarSDK/Headers/ZBarReaderController.h; sourceTree = "<group>"; };
|
||||||
|
ACE103B71F8FCC7100D17794 /* ZBarSymbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZBarSymbol.h; path = ZBarSDK/Headers/ZBarSymbol.h; sourceTree = "<group>"; };
|
||||||
|
ACE103BE1F8FCD1400D17794 /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Window.h; path = ZBarSDK/Headers/zbar/Window.h; sourceTree = "<group>"; };
|
||||||
|
ACE103BF1F8FCD1500D17794 /* Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Decoder.h; path = ZBarSDK/Headers/zbar/Decoder.h; sourceTree = "<group>"; };
|
||||||
|
ACE103C01F8FCD1500D17794 /* Processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Processor.h; path = ZBarSDK/Headers/zbar/Processor.h; sourceTree = "<group>"; };
|
||||||
|
ACE103C11F8FCD1500D17794 /* Exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Exception.h; path = ZBarSDK/Headers/zbar/Exception.h; sourceTree = "<group>"; };
|
||||||
|
ACE103C21F8FCD1500D17794 /* Symbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Symbol.h; path = ZBarSDK/Headers/zbar/Symbol.h; sourceTree = "<group>"; };
|
||||||
|
ACE103C31F8FCD1500D17794 /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Image.h; path = ZBarSDK/Headers/zbar/Image.h; sourceTree = "<group>"; };
|
||||||
|
ACE103C41F8FCD1500D17794 /* Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Video.h; path = ZBarSDK/Headers/zbar/Video.h; sourceTree = "<group>"; };
|
||||||
|
ACE103C51F8FCD1500D17794 /* ImageScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ImageScanner.h; path = ZBarSDK/Headers/zbar/ImageScanner.h; sourceTree = "<group>"; };
|
||||||
|
ACE103C61F8FCD1500D17794 /* Scanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Scanner.h; path = ZBarSDK/Headers/zbar/Scanner.h; sourceTree = "<group>"; };
|
||||||
BBA9BAFD1F176DD10053B6EA /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
BBA9BAFD1F176DD10053B6EA /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||||
BBA9BAFE1F176DD10053B6EA /* ScannerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScannerViewController.swift; sourceTree = "<group>"; };
|
BBA9BAFE1F176DD10053B6EA /* ScannerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScannerViewController.swift; sourceTree = "<group>"; };
|
||||||
BBA9BB311F1792570053B6EA /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
|
BBA9BB311F1792570053B6EA /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
|
||||||
@@ -79,31 +96,6 @@
|
|||||||
BBA9BB371F1792730053B6EA /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
|
BBA9BB371F1792730053B6EA /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
|
||||||
BBA9BB391F17927C0053B6EA /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; };
|
BBA9BB391F17927C0053B6EA /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; };
|
||||||
BBA9BB3B1F1792A90053B6EA /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
BBA9BB3B1F1792A90053B6EA /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||||
BBA9BB411F179C320053B6EA /* Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Decoder.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB421F179C320053B6EA /* Exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Exception.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB431F179C320053B6EA /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB441F179C320053B6EA /* ImageScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageScanner.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB451F179C320053B6EA /* Processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Processor.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB461F179C320053B6EA /* Scanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Scanner.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB471F179C320053B6EA /* Symbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Symbol.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB481F179C320053B6EA /* Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Video.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB491F179C320053B6EA /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Window.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB4A1F179C320053B6EA /* zbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zbar.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB4B1F179C320053B6EA /* ZBarCameraSimulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarCameraSimulator.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB4C1F179C320053B6EA /* ZBarCaptureReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarCaptureReader.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB4D1F179C320053B6EA /* ZBarHelpController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarHelpController.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB4E1F179C320053B6EA /* ZBarImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarImage.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB4F1F179C320053B6EA /* ZBarImageScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarImageScanner.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB501F179C320053B6EA /* ZBarReaderController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderController.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB511F179C320053B6EA /* ZBarReaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderView.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB521F179C320053B6EA /* ZBarReaderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderViewController.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB531F179C320053B6EA /* ZBarSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarSDK.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB541F179C320053B6EA /* ZBarSymbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarSymbol.h; sourceTree = "<group>"; };
|
|
||||||
BBA9BB551F179C320053B6EA /* libzbar.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libzbar.a; sourceTree = "<group>"; };
|
|
||||||
BBA9BB571F179C320053B6EA /* zbar-back.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zbar-back.png"; sourceTree = "<group>"; };
|
|
||||||
BBA9BB581F179C320053B6EA /* zbar-help.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "zbar-help.html"; sourceTree = "<group>"; };
|
|
||||||
BBA9BB591F179C320053B6EA /* zbar-helpicons.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zbar-helpicons.png"; sourceTree = "<group>"; };
|
|
||||||
BBA9BB5A1F179C320053B6EA /* zbar-samples.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zbar-samples.png"; sourceTree = "<group>"; };
|
|
||||||
BBA9BB601F179D270053B6EA /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
|
BBA9BB601F179D270053B6EA /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
@@ -121,7 +113,7 @@
|
|||||||
BBA9BB321F1792570053B6EA /* AVFoundation.framework in Frameworks */,
|
BBA9BB321F1792570053B6EA /* AVFoundation.framework in Frameworks */,
|
||||||
9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
|
9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
|
||||||
3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
|
3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
|
||||||
BBA9BB5B1F179C320053B6EA /* libzbar.a in Frameworks */,
|
ACE103AC1F8FCC6000D17794 /* libzbar.a in Frameworks */,
|
||||||
755861CA44FB15BD2EFD12F7 /* libPods-Runner.a in Frameworks */,
|
755861CA44FB15BD2EFD12F7 /* libPods-Runner.a in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@@ -153,7 +145,7 @@
|
|||||||
97C146E51CF9000F007C117D = {
|
97C146E51CF9000F007C117D = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
BBA9BB3D1F179C320053B6EA /* ZBarSDK */,
|
ACE103BB1F8FCCA500D17794 /* ZBarSDK */,
|
||||||
9740EEB11CF90186004384FC /* Flutter */,
|
9740EEB11CF90186004384FC /* Flutter */,
|
||||||
97C146F01CF9000F007C117D /* Runner */,
|
97C146F01CF9000F007C117D /* Runner */,
|
||||||
97C146EF1CF9000F007C117D /* Products */,
|
97C146EF1CF9000F007C117D /* Products */,
|
||||||
@@ -196,6 +188,50 @@
|
|||||||
name = "Supporting Files";
|
name = "Supporting Files";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
ACE103BB1F8FCCA500D17794 /* ZBarSDK */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
ACE103AB1F8FCC6000D17794 /* libzbar.a */,
|
||||||
|
ACE103BC1F8FCCD000D17794 /* Headers */,
|
||||||
|
);
|
||||||
|
name = ZBarSDK;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
ACE103BC1F8FCCD000D17794 /* Headers */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
ACE103BD1F8FCCF300D17794 /* zbar */,
|
||||||
|
ACE103AD1F8FCC6F00D17794 /* zbar.h */,
|
||||||
|
ACE103AE1F8FCC6F00D17794 /* ZBarCaptureReader.h */,
|
||||||
|
ACE103AF1F8FCC6F00D17794 /* ZBarReaderViewController.h */,
|
||||||
|
ACE103B31F8FCC7000D17794 /* ZBarSDK.h */,
|
||||||
|
ACE103B71F8FCC7100D17794 /* ZBarSymbol.h */,
|
||||||
|
ACE103B11F8FCC7000D17794 /* ZBarCameraSimulator.h */,
|
||||||
|
ACE103B41F8FCC7000D17794 /* ZBarHelpController.h */,
|
||||||
|
ACE103B01F8FCC6F00D17794 /* ZBarImage.h */,
|
||||||
|
ACE103B51F8FCC7000D17794 /* ZBarImageScanner.h */,
|
||||||
|
ACE103B61F8FCC7100D17794 /* ZBarReaderController.h */,
|
||||||
|
ACE103B21F8FCC7000D17794 /* ZBarReaderView.h */,
|
||||||
|
);
|
||||||
|
name = Headers;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
ACE103BD1F8FCCF300D17794 /* zbar */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
ACE103BF1F8FCD1500D17794 /* Decoder.h */,
|
||||||
|
ACE103C11F8FCD1500D17794 /* Exception.h */,
|
||||||
|
ACE103C31F8FCD1500D17794 /* Image.h */,
|
||||||
|
ACE103C51F8FCD1500D17794 /* ImageScanner.h */,
|
||||||
|
ACE103C01F8FCD1500D17794 /* Processor.h */,
|
||||||
|
ACE103C61F8FCD1500D17794 /* Scanner.h */,
|
||||||
|
ACE103C21F8FCD1500D17794 /* Symbol.h */,
|
||||||
|
ACE103C41F8FCD1500D17794 /* Video.h */,
|
||||||
|
ACE103BE1F8FCD1400D17794 /* Window.h */,
|
||||||
|
);
|
||||||
|
name = zbar;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
BBA9BB001F1786510053B6EA /* Frameworks */ = {
|
BBA9BB001F1786510053B6EA /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -211,70 +247,6 @@
|
|||||||
name = Frameworks;
|
name = Frameworks;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
BBA9BB3D1F179C320053B6EA /* ZBarSDK */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
BBA9BB3E1F179C320053B6EA /* Headers */,
|
|
||||||
BBA9BB551F179C320053B6EA /* libzbar.a */,
|
|
||||||
BBA9BB561F179C320053B6EA /* Resources */,
|
|
||||||
);
|
|
||||||
path = ZBarSDK;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
BBA9BB3E1F179C320053B6EA /* Headers */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
BBA9BB3F1F179C320053B6EA /* ZBarSDK */,
|
|
||||||
);
|
|
||||||
path = Headers;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
BBA9BB3F1F179C320053B6EA /* ZBarSDK */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
BBA9BB401F179C320053B6EA /* zbar */,
|
|
||||||
BBA9BB4A1F179C320053B6EA /* zbar.h */,
|
|
||||||
BBA9BB4B1F179C320053B6EA /* ZBarCameraSimulator.h */,
|
|
||||||
BBA9BB4C1F179C320053B6EA /* ZBarCaptureReader.h */,
|
|
||||||
BBA9BB4D1F179C320053B6EA /* ZBarHelpController.h */,
|
|
||||||
BBA9BB4E1F179C320053B6EA /* ZBarImage.h */,
|
|
||||||
BBA9BB4F1F179C320053B6EA /* ZBarImageScanner.h */,
|
|
||||||
BBA9BB501F179C320053B6EA /* ZBarReaderController.h */,
|
|
||||||
BBA9BB511F179C320053B6EA /* ZBarReaderView.h */,
|
|
||||||
BBA9BB521F179C320053B6EA /* ZBarReaderViewController.h */,
|
|
||||||
BBA9BB531F179C320053B6EA /* ZBarSDK.h */,
|
|
||||||
BBA9BB541F179C320053B6EA /* ZBarSymbol.h */,
|
|
||||||
);
|
|
||||||
path = ZBarSDK;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
BBA9BB401F179C320053B6EA /* zbar */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
BBA9BB411F179C320053B6EA /* Decoder.h */,
|
|
||||||
BBA9BB421F179C320053B6EA /* Exception.h */,
|
|
||||||
BBA9BB431F179C320053B6EA /* Image.h */,
|
|
||||||
BBA9BB441F179C320053B6EA /* ImageScanner.h */,
|
|
||||||
BBA9BB451F179C320053B6EA /* Processor.h */,
|
|
||||||
BBA9BB461F179C320053B6EA /* Scanner.h */,
|
|
||||||
BBA9BB471F179C320053B6EA /* Symbol.h */,
|
|
||||||
BBA9BB481F179C320053B6EA /* Video.h */,
|
|
||||||
BBA9BB491F179C320053B6EA /* Window.h */,
|
|
||||||
);
|
|
||||||
path = zbar;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
BBA9BB561F179C320053B6EA /* Resources */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
BBA9BB571F179C320053B6EA /* zbar-back.png */,
|
|
||||||
BBA9BB581F179C320053B6EA /* zbar-help.html */,
|
|
||||||
BBA9BB591F179C320053B6EA /* zbar-helpicons.png */,
|
|
||||||
BBA9BB5A1F179C320053B6EA /* zbar-samples.png */,
|
|
||||||
);
|
|
||||||
path = Resources;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
@@ -312,7 +284,7 @@
|
|||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
97C146ED1CF9000F007C117D = {
|
97C146ED1CF9000F007C117D = {
|
||||||
CreatedOnToolsVersion = 7.3.1;
|
CreatedOnToolsVersion = 7.3.1;
|
||||||
DevelopmentTeam = SU33AJBF5T;
|
DevelopmentTeam = DZRQLG966A;
|
||||||
LastSwiftMigration = 0830;
|
LastSwiftMigration = 0830;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -340,15 +312,11 @@
|
|||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
BBA9BB5E1F179C320053B6EA /* zbar-helpicons.png in Resources */,
|
|
||||||
9740EEBB1CF902C7004384FC /* app.flx in Resources */,
|
9740EEBB1CF902C7004384FC /* app.flx in Resources */,
|
||||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
|
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
|
||||||
BBA9BB5F1F179C320053B6EA /* zbar-samples.png in Resources */,
|
|
||||||
9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */,
|
9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */,
|
||||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
|
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
|
||||||
BBA9BB5D1F179C320053B6EA /* zbar-help.html in Resources */,
|
|
||||||
9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,
|
9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,
|
||||||
BBA9BB5C1F179C320053B6EA /* zbar-back.png in Resources */,
|
|
||||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
|
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
|
||||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
|
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
|
||||||
);
|
);
|
||||||
@@ -398,7 +366,7 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n";
|
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
889CEA9B47E2F8AFF76F6433 /* [CP] Embed Pods Frameworks */ = {
|
889CEA9B47E2F8AFF76F6433 /* [CP] Embed Pods Frameworks */ = {
|
||||||
@@ -560,11 +528,16 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = "$(ARCHS_STANDARD)";
|
ARCHS = (
|
||||||
|
"$(ARCHS_STANDARD)",
|
||||||
|
arm7s,
|
||||||
|
armv7,
|
||||||
|
arm64,
|
||||||
|
);
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = SU33AJBF5T;
|
DEVELOPMENT_TEAM = DZRQLG966A;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -577,6 +550,7 @@
|
|||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
"$(PROJECT_DIR)/ZBarSDK",
|
"$(PROJECT_DIR)/ZBarSDK",
|
||||||
);
|
);
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.dinnect.checker;
|
PRODUCT_BUNDLE_IDENTIFIER = com.dinnect.checker;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
@@ -589,11 +563,16 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = "$(ARCHS_STANDARD)";
|
ARCHS = (
|
||||||
|
"$(ARCHS_STANDARD)",
|
||||||
|
arm7s,
|
||||||
|
armv7,
|
||||||
|
arm64,
|
||||||
|
);
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = SU33AJBF5T;
|
DEVELOPMENT_TEAM = DZRQLG966A;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -610,9 +589,93 @@
|
|||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 3.0;
|
||||||
|
VALID_ARCHS = "arm64 armv7s";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
ACB2A14B1F964D1C00030E6F /* Debug-develop */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = "Debug-develop";
|
||||||
|
};
|
||||||
|
ACB2A14C1F964D1C00030E6F /* Debug-develop */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = (
|
||||||
|
"$(ARCHS_STANDARD)",
|
||||||
|
arm7s,
|
||||||
|
armv7,
|
||||||
|
arm64,
|
||||||
|
);
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
DEFINES_MODULE = YES;
|
||||||
|
DEVELOPMENT_TEAM = DZRQLG966A;
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/Flutter",
|
||||||
|
);
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
|
LIBRARY_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/Flutter",
|
||||||
|
"$(PROJECT_DIR)/ZBarSDK",
|
||||||
|
);
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.dinnect.checker;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 3.0;
|
||||||
|
};
|
||||||
|
name = "Debug-develop";
|
||||||
|
};
|
||||||
/* End XCBuildConfiguration section */
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
/* Begin XCConfigurationList section */
|
||||||
@@ -620,6 +683,7 @@
|
|||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
97C147031CF9000F007C117D /* Debug */,
|
97C147031CF9000F007C117D /* Debug */,
|
||||||
|
ACB2A14B1F964D1C00030E6F /* Debug-develop */,
|
||||||
97C147041CF9000F007C117D /* Release */,
|
97C147041CF9000F007C117D /* Release */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
@@ -629,6 +693,7 @@
|
|||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
97C147061CF9000F007C117D /* Debug */,
|
97C147061CF9000F007C117D /* Debug */,
|
||||||
|
ACB2A14C1F964D1C00030E6F /* Debug-develop */,
|
||||||
97C147071CF9000F007C117D /* Release */,
|
97C147071CF9000F007C117D /* Release */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
language = ""
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
<Testables>
|
<Testables>
|
||||||
</Testables>
|
</Testables>
|
||||||
@@ -45,6 +46,7 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
language = ""
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
@@ -61,6 +63,13 @@
|
|||||||
ReferencedContainer = "container:Runner.xcodeproj">
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
|
<EnvironmentVariables>
|
||||||
|
<EnvironmentVariable
|
||||||
|
key = "flavor"
|
||||||
|
value = "develop"
|
||||||
|
isEnabled = "YES">
|
||||||
|
</EnvironmentVariable>
|
||||||
|
</EnvironmentVariables>
|
||||||
<AdditionalOptions>
|
<AdditionalOptions>
|
||||||
</AdditionalOptions>
|
</AdditionalOptions>
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "0830"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
language = ""
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug-develop"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
language = ""
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
<EnvironmentVariables>
|
||||||
|
<EnvironmentVariable
|
||||||
|
key = "test"
|
||||||
|
value = "semyon"
|
||||||
|
isEnabled = "YES">
|
||||||
|
</EnvironmentVariable>
|
||||||
|
</EnvironmentVariables>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>SchemeUserState</key>
|
||||||
|
<dict>
|
||||||
|
<key>Runner.xcscheme_^#shared#^_</key>
|
||||||
|
<dict>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>4</integer>
|
||||||
|
</dict>
|
||||||
|
<key>develop.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>3</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<array/>
|
||||||
|
</plist>
|
||||||
BIN
ios/Runner.xcworkspace/xcuserdata/ntrlab.xcuserdatad/UserInterfaceState.xcuserstate
generated
Normal file
BIN
ios/Runner.xcworkspace/xcuserdata/ntrlab.xcuserdatad/UserInterfaceState.xcuserstate
generated
Normal file
Binary file not shown.
@@ -0,0 +1,151 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Bucket
|
||||||
|
type = "0"
|
||||||
|
version = "2.0">
|
||||||
|
<Breakpoints>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "Runner/AppDelegate.m"
|
||||||
|
timestampString = "530037922.027807"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "20"
|
||||||
|
endingLineNumber = "20"
|
||||||
|
landmarkName = "-application:didFinishLaunchingWithOptions:"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "Runner/AppDelegate.m"
|
||||||
|
timestampString = "530037922.028217"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "10"
|
||||||
|
endingLineNumber = "10"
|
||||||
|
landmarkName = "-application:didFinishLaunchingWithOptions:"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "Runner/AppDelegate.m"
|
||||||
|
timestampString = "530037922.028507"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "13"
|
||||||
|
endingLineNumber = "13"
|
||||||
|
landmarkName = "-application:didFinishLaunchingWithOptions:"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "Runner/AppDelegate.m"
|
||||||
|
timestampString = "530037922.028781"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "15"
|
||||||
|
endingLineNumber = "15"
|
||||||
|
landmarkName = "-application:didFinishLaunchingWithOptions:"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "Runner/AppDelegate.m"
|
||||||
|
timestampString = "530037922.029048"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "9"
|
||||||
|
endingLineNumber = "9"
|
||||||
|
landmarkName = "-application:didFinishLaunchingWithOptions:"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "Runner/ScannerViewController.swift"
|
||||||
|
timestampString = "530037922.029373"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "50"
|
||||||
|
endingLineNumber = "50"
|
||||||
|
landmarkName = "imagePickerController(_:didFinishPickingMediaWithInfo:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
<Locations>
|
||||||
|
<Location
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "Runner.ScannerViewController.imagePickerController(__ObjC.UIImagePickerController, didFinishPickingMediaWithInfo: Swift.Dictionary<Swift.String, Any>) -> ()"
|
||||||
|
moduleName = "Runner"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/ntrlab/semyon/apps/checker/ios/Runner/ScannerViewController.swift"
|
||||||
|
timestampString = "530035394.220038"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "48"
|
||||||
|
endingLineNumber = "48"
|
||||||
|
offsetFromSymbolStart = "1112">
|
||||||
|
</Location>
|
||||||
|
<Location
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "closure #1 () -> () in Runner.ScannerViewController.imagePickerController(__ObjC.UIImagePickerController, didFinishPickingMediaWithInfo: Swift.Dictionary<Swift.String, Any>) -> ()"
|
||||||
|
moduleName = "Runner"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/ntrlab/semyon/apps/checker/ios/Runner/ScannerViewController.swift"
|
||||||
|
timestampString = "530035394.222527"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "49"
|
||||||
|
endingLineNumber = "49"
|
||||||
|
offsetFromSymbolStart = "28">
|
||||||
|
</Location>
|
||||||
|
</Locations>
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "Runner/ScannerViewController.swift"
|
||||||
|
timestampString = "530037922.029767"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "51"
|
||||||
|
endingLineNumber = "51"
|
||||||
|
landmarkName = "imagePickerController(_:didFinishPickingMediaWithInfo:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
</Breakpoints>
|
||||||
|
</Bucket>
|
||||||
@@ -11,19 +11,50 @@
|
|||||||
|
|
||||||
FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
|
FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
|
||||||
|
|
||||||
FlutterMethodChannel* scannerChannel = [FlutterMethodChannel
|
FlutterMethodChannel* platformChannel = [FlutterMethodChannel
|
||||||
methodChannelWithName:@"com.yourcompany.checker/scanner"
|
methodChannelWithName:@"com.dinect.checker/instance_id"
|
||||||
binaryMessenger:controller];
|
binaryMessenger:controller];
|
||||||
|
|
||||||
[scannerChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
|
__weak FlutterMethodChannel* weekPlatformChannel = platformChannel;
|
||||||
|
|
||||||
|
[platformChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
|
||||||
|
NSLog(@"%@", call.method);
|
||||||
|
|
||||||
|
// NSDictionary *dict = [[NSProcessInfo processInfo] environment];
|
||||||
|
// NSLog(@"%@", dict);
|
||||||
|
|
||||||
|
if ([@"getLocale" isEqualToString:call.method]) {
|
||||||
|
result(@"ru");
|
||||||
|
} else if ([@"getFlavor" isEqualToString:call.method]) {
|
||||||
|
result(@"autobonus");
|
||||||
|
} else if ([@"getCurrency" isEqualToString:call.method]) {
|
||||||
|
result(@643);
|
||||||
|
} else if ([@"startScanner" isEqualToString:call.method]) {
|
||||||
ScannerViewController *modalViewController = [ScannerViewController new];
|
ScannerViewController *modalViewController = [ScannerViewController new];
|
||||||
[controller presentViewController:modalViewController animated:YES completion:nil]; }];
|
modalViewController.platformChannel = weekPlatformChannel;
|
||||||
|
[controller presentViewController:modalViewController animated:YES completion:nil];
|
||||||
|
// [weekPlatformChannel invokeMethod:@"purchase" arguments:@[@"semyon", @"49492872388755"]];
|
||||||
|
} else if ([@"isOnline" isEqualToString:call.method]) {
|
||||||
|
result(@YES);
|
||||||
|
} else if ([@"getSupportPhone" isEqualToString:call.method]) {
|
||||||
|
result(@"8 800 555 35 35");
|
||||||
|
} else if ([@"getSupportUrl" isEqualToString:call.method]) {
|
||||||
|
result(@"http://yandex.ru/");
|
||||||
|
} else if ([@"getEndpoint" isEqualToString:call.method]) {
|
||||||
|
result(@"https://pos-api-int.dinect.com/20130701/");
|
||||||
|
} else if ([@"getAppToken" isEqualToString:call.method]) {
|
||||||
|
result(@"9fec83cdca38c357e6b65dbb17514cdd36bf2a08");
|
||||||
|
} else if ([@"getAppTitle" isEqualToString:call.method]) {
|
||||||
|
result(@"Autobonus");
|
||||||
|
} else if ([@"showBonus" isEqualToString:call.method]) {
|
||||||
|
result(@YES);
|
||||||
|
} else {
|
||||||
|
result(FlutterMethodNotImplemented);
|
||||||
|
}
|
||||||
|
|
||||||
|
}];
|
||||||
|
|
||||||
return [super application:application didFinishLaunchingWithOptions:launchOptions];
|
return [super application:application didFinishLaunchingWithOptions:launchOptions];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) showScanner {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -107,6 +107,11 @@
|
|||||||
"idiom" : "ipad",
|
"idiom" : "ipad",
|
||||||
"filename" : "Icon-App-83.5x83.5@2x.png",
|
"filename" : "Icon-App-83.5x83.5@2x.png",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ios-marketing",
|
||||||
|
"size" : "1024x1024",
|
||||||
|
"scale" : "1x"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"info" : {
|
"info" : {
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13196" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
||||||
<device id="retina5_5" orientation="portrait">
|
<device id="retina5_5" orientation="portrait">
|
||||||
<adaptation id="fullscreen"/>
|
<adaptation id="fullscreen"/>
|
||||||
</device>
|
</device>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13173"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
|
|||||||
@@ -7,10 +7,11 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import Flutter
|
||||||
|
|
||||||
extension ZBarSymbolSet: Sequence {
|
extension ZBarSymbolSet: Sequence {
|
||||||
public typealias Element = ZBarSymbol
|
//public typealias Element = ZBarSymbol
|
||||||
public typealias Iterator = NSFastEnumerationIterator
|
//public typealias Iterator = NSFastEnumerationIterator
|
||||||
|
|
||||||
public func makeIterator() -> NSFastEnumerationIterator {
|
public func makeIterator() -> NSFastEnumerationIterator {
|
||||||
return NSFastEnumerationIterator(self)
|
return NSFastEnumerationIterator(self)
|
||||||
@@ -18,6 +19,7 @@ extension ZBarSymbolSet: Sequence {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc class ScannerViewController: UIViewController, ZBarReaderDelegate {
|
@objc class ScannerViewController: UIViewController, ZBarReaderDelegate {
|
||||||
|
var platformChannel: FlutterMethodChannel?
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
@@ -28,10 +30,13 @@ extension ZBarSymbolSet: Sequence {
|
|||||||
let readerViewController = ZBarReaderViewController()
|
let readerViewController = ZBarReaderViewController()
|
||||||
readerViewController.readerDelegate = self
|
readerViewController.readerDelegate = self
|
||||||
readerViewController.readerView.zoom = 1.0
|
readerViewController.readerView.zoom = 1.0
|
||||||
readerViewController.showsZBarControls = false
|
readerViewController.showsZBarControls = true
|
||||||
self.present(readerViewController, animated: true)
|
self.present(readerViewController, animated: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
|
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
|
||||||
guard let symbols = info[ZBarReaderControllerResults] as? ZBarSymbolSet else { return }
|
guard let symbols = info[ZBarReaderControllerResults] as? ZBarSymbolSet else { return }
|
||||||
|
|
||||||
@@ -39,9 +44,21 @@ extension ZBarSymbolSet: Sequence {
|
|||||||
|
|
||||||
if let symbol = symbol as? ZBarSymbol, let data = symbol.data {
|
if let symbol = symbol as? ZBarSymbol, let data = symbol.data {
|
||||||
|
|
||||||
let toast = UIAlertView()
|
if let platformChannel = self.platformChannel {
|
||||||
toast.message = data
|
self.dismiss(animated: true, completion: {
|
||||||
toast.show()
|
self.presentingViewController?.dismiss(animated: true, completion: {
|
||||||
|
platformChannel.invokeMethod("findUserAndPurchase", arguments: [data], result: { (result: Any?) in
|
||||||
|
print("\(result ?? "")")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
// let result = platformChannel.invokeMethod("getUserByCode", arguments: [data], handleResult(result: FlutterResult))
|
||||||
|
// print(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// let toast = UIAlertView()
|
||||||
|
// toast.message = data
|
||||||
|
// toast.show()
|
||||||
|
|
||||||
navigationController?.popViewController(animated: true)
|
navigationController?.popViewController(animated: true)
|
||||||
}
|
}
|
||||||
|
|||||||
1
ios/ServiceDefinitions.json
Normal file
1
ios/ServiceDefinitions.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"services":[]}
|
||||||
45
ios/ZBarSDK/Headers/ZBarCameraSimulator.h
Normal file
45
ios/ZBarSDK/Headers/ZBarCameraSimulator.h
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
//------------------------------------------------------------------------
|
||||||
|
// Copyright 2010-2011 (c) Jeff Brown <spadix@users.sourceforge.net>
|
||||||
|
//
|
||||||
|
// This file is part of the ZBar Bar Code Reader.
|
||||||
|
//
|
||||||
|
// The ZBar Bar Code Reader is free software; you can redistribute it
|
||||||
|
// and/or modify it under the terms of the GNU Lesser Public License as
|
||||||
|
// published by the Free Software Foundation; either version 2.1 of
|
||||||
|
// the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// The ZBar Bar Code Reader is distributed in the hope that it will be
|
||||||
|
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Lesser Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser Public License
|
||||||
|
// along with the ZBar Bar Code Reader; if not, write to the Free
|
||||||
|
// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||||
|
// Boston, MA 02110-1301 USA
|
||||||
|
//
|
||||||
|
// http://sourceforge.net/projects/zbar
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@class ZBarReaderView;
|
||||||
|
|
||||||
|
// hack around missing simulator support for AVCapture interfaces
|
||||||
|
|
||||||
|
@interface ZBarCameraSimulator
|
||||||
|
: NSObject
|
||||||
|
< UINavigationControllerDelegate,
|
||||||
|
UIImagePickerControllerDelegate,
|
||||||
|
UIPopoverControllerDelegate >
|
||||||
|
{
|
||||||
|
UIViewController *viewController;
|
||||||
|
ZBarReaderView *readerView;
|
||||||
|
UIImagePickerController *picker;
|
||||||
|
UIPopoverController *pickerPopover;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) initWithViewController: (UIViewController*) viewController;
|
||||||
|
- (void) takePicture;
|
||||||
|
|
||||||
|
@property (nonatomic, assign) ZBarReaderView *readerView;
|
||||||
|
|
||||||
|
@end
|
||||||
111
ios/ZBarSDK/Headers/ZBarCaptureReader.h
Normal file
111
ios/ZBarSDK/Headers/ZBarCaptureReader.h
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
//------------------------------------------------------------------------
|
||||||
|
// Copyright 2010 (c) Jeff Brown <spadix@users.sourceforge.net>
|
||||||
|
//
|
||||||
|
// This file is part of the ZBar Bar Code Reader.
|
||||||
|
//
|
||||||
|
// The ZBar Bar Code Reader is free software; you can redistribute it
|
||||||
|
// and/or modify it under the terms of the GNU Lesser Public License as
|
||||||
|
// published by the Free Software Foundation; either version 2.1 of
|
||||||
|
// the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// The ZBar Bar Code Reader is distributed in the hope that it will be
|
||||||
|
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Lesser Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser Public License
|
||||||
|
// along with the ZBar Bar Code Reader; if not, write to the Free
|
||||||
|
// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||||
|
// Boston, MA 02110-1301 USA
|
||||||
|
//
|
||||||
|
// http://sourceforge.net/projects/zbar
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#import <CoreGraphics/CoreGraphics.h>
|
||||||
|
#import "ZBarImageScanner.h"
|
||||||
|
|
||||||
|
@class AVCaptureVideoDataOutput, AVCaptureOutput;
|
||||||
|
@class ZBarCaptureReader, ZBarCVImage;
|
||||||
|
|
||||||
|
@protocol ZBarCaptureDelegate <NSObject>
|
||||||
|
|
||||||
|
// called when a new barcode is detected. the image refers to the
|
||||||
|
// video buffer and must not be retained for long
|
||||||
|
- (void) captureReader: (ZBarCaptureReader*) captureReader
|
||||||
|
didReadNewSymbolsFromImage: (ZBarImage*) image;
|
||||||
|
|
||||||
|
@optional
|
||||||
|
// called when a potential/uncertain barcode is detected. will also
|
||||||
|
// be called *after* captureReader:didReadNewSymbolsFromImage:
|
||||||
|
// when good barcodes are detected
|
||||||
|
- (void) captureReader: (ZBarCaptureReader*) captureReader
|
||||||
|
didTrackSymbols: (ZBarSymbolSet*) symbols;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface ZBarCaptureReader
|
||||||
|
: NSObject
|
||||||
|
{
|
||||||
|
#if !TARGET_IPHONE_SIMULATOR
|
||||||
|
AVCaptureVideoDataOutput *captureOutput;
|
||||||
|
id<ZBarCaptureDelegate> captureDelegate;
|
||||||
|
ZBarImageScanner *scanner;
|
||||||
|
CGRect scanCrop;
|
||||||
|
CGSize size;
|
||||||
|
CGFloat framesPerSecond;
|
||||||
|
BOOL enableCache;
|
||||||
|
|
||||||
|
dispatch_queue_t queue;
|
||||||
|
ZBarImage *image;
|
||||||
|
ZBarCVImage *result;
|
||||||
|
volatile uint32_t state;
|
||||||
|
int framecnt;
|
||||||
|
unsigned width, height;
|
||||||
|
uint64_t t_frame, t_fps, t_scan;
|
||||||
|
CGFloat dt_frame;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// supply a pre-configured image scanner
|
||||||
|
- (id) initWithImageScanner: (ZBarImageScanner*) imageScanner;
|
||||||
|
|
||||||
|
// this must be called before the session is started
|
||||||
|
- (void) willStartRunning;
|
||||||
|
|
||||||
|
// this must be called *before* the session is stopped
|
||||||
|
- (void) willStopRunning;
|
||||||
|
|
||||||
|
// clear the internal result cache
|
||||||
|
- (void) flushCache;
|
||||||
|
|
||||||
|
// capture the next frame after processing. the captured image will
|
||||||
|
// follow the same delegate path as an image with decoded symbols.
|
||||||
|
- (void) captureFrame;
|
||||||
|
|
||||||
|
// the capture output. add this to an instance of AVCaptureSession
|
||||||
|
@property (nonatomic, readonly) AVCaptureOutput *captureOutput;
|
||||||
|
|
||||||
|
// delegate is notified of decode results and symbol tracking.
|
||||||
|
@property (nonatomic, assign) id<ZBarCaptureDelegate> captureDelegate;
|
||||||
|
|
||||||
|
// access to image scanner for configuration.
|
||||||
|
@property (nonatomic, readonly) ZBarImageScanner *scanner;
|
||||||
|
|
||||||
|
// region of image to scan in normalized coordinates.
|
||||||
|
// NB horizontal crop currently ignored...
|
||||||
|
@property (nonatomic, assign) CGRect scanCrop;
|
||||||
|
|
||||||
|
// size of video frames.
|
||||||
|
@property (nonatomic, readonly) CGSize size;
|
||||||
|
|
||||||
|
// (quickly) gate the reader function without interrupting the video
|
||||||
|
// stream. also flushes the cache when enabled. defaults to *NO*
|
||||||
|
@property (nonatomic) BOOL enableReader;
|
||||||
|
|
||||||
|
// current frame rate (for debug/optimization).
|
||||||
|
// only valid when running
|
||||||
|
@property (nonatomic, readonly) CGFloat framesPerSecond;
|
||||||
|
|
||||||
|
@property (nonatomic) BOOL enableCache;
|
||||||
|
|
||||||
|
@end
|
||||||
60
ios/ZBarSDK/Headers/ZBarHelpController.h
Normal file
60
ios/ZBarSDK/Headers/ZBarHelpController.h
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
//------------------------------------------------------------------------
|
||||||
|
// Copyright 2009-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
|
||||||
|
//
|
||||||
|
// This file is part of the ZBar Bar Code Reader.
|
||||||
|
//
|
||||||
|
// The ZBar Bar Code Reader is free software; you can redistribute it
|
||||||
|
// and/or modify it under the terms of the GNU Lesser Public License as
|
||||||
|
// published by the Free Software Foundation; either version 2.1 of
|
||||||
|
// the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// The ZBar Bar Code Reader is distributed in the hope that it will be
|
||||||
|
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Lesser Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser Public License
|
||||||
|
// along with the ZBar Bar Code Reader; if not, write to the Free
|
||||||
|
// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||||
|
// Boston, MA 02110-1301 USA
|
||||||
|
//
|
||||||
|
// http://sourceforge.net/projects/zbar
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@class ZBarHelpController;
|
||||||
|
|
||||||
|
@protocol ZBarHelpDelegate
|
||||||
|
@optional
|
||||||
|
|
||||||
|
- (void) helpControllerDidFinish: (ZBarHelpController*) help;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
// failure dialog w/a few useful tips
|
||||||
|
|
||||||
|
@interface ZBarHelpController : UIViewController
|
||||||
|
< UIWebViewDelegate,
|
||||||
|
UIAlertViewDelegate >
|
||||||
|
{
|
||||||
|
NSString *reason;
|
||||||
|
id delegate;
|
||||||
|
UIWebView *webView;
|
||||||
|
UIToolbar *toolbar;
|
||||||
|
UIBarButtonItem *doneBtn, *backBtn, *space;
|
||||||
|
NSURL *linkURL;
|
||||||
|
NSUInteger orientations;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, assign) id<ZBarHelpDelegate> delegate;
|
||||||
|
|
||||||
|
// designated initializer
|
||||||
|
- (id) initWithReason: (NSString*) reason;
|
||||||
|
|
||||||
|
- (BOOL) isInterfaceOrientationSupported: (UIInterfaceOrientation) orientation;
|
||||||
|
- (void) setInterfaceOrientation: (UIInterfaceOrientation) orientation
|
||||||
|
supported: (BOOL) supported;
|
||||||
|
|
||||||
|
@end
|
||||||
69
ios/ZBarSDK/Headers/ZBarImage.h
Normal file
69
ios/ZBarSDK/Headers/ZBarImage.h
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
//------------------------------------------------------------------------
|
||||||
|
// Copyright 2009 (c) Jeff Brown <spadix@users.sourceforge.net>
|
||||||
|
//
|
||||||
|
// This file is part of the ZBar Bar Code Reader.
|
||||||
|
//
|
||||||
|
// The ZBar Bar Code Reader is free software; you can redistribute it
|
||||||
|
// and/or modify it under the terms of the GNU Lesser Public License as
|
||||||
|
// published by the Free Software Foundation; either version 2.1 of
|
||||||
|
// the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// The ZBar Bar Code Reader is distributed in the hope that it will be
|
||||||
|
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Lesser Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser Public License
|
||||||
|
// along with the ZBar Bar Code Reader; if not, write to the Free
|
||||||
|
// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||||
|
// Boston, MA 02110-1301 USA
|
||||||
|
//
|
||||||
|
// http://sourceforge.net/projects/zbar
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "zbar.h"
|
||||||
|
#import "ZBarSymbol.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
using namespace zbar;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Obj-C wrapper for ZBar image
|
||||||
|
|
||||||
|
@interface ZBarImage : NSObject
|
||||||
|
{
|
||||||
|
zbar_image_t *zimg;
|
||||||
|
double t_convert;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic) unsigned long format;
|
||||||
|
@property (nonatomic) unsigned sequence;
|
||||||
|
@property (nonatomic) CGSize size;
|
||||||
|
@property (nonatomic) CGRect crop;
|
||||||
|
@property (readonly, nonatomic) const void *data;
|
||||||
|
@property (readonly, nonatomic) unsigned long dataLength;
|
||||||
|
@property (copy, nonatomic) ZBarSymbolSet *symbols;
|
||||||
|
@property (readonly, nonatomic) zbar_image_t *zbarImage;
|
||||||
|
@property (readonly, nonatomic) UIImage *UIImage;
|
||||||
|
|
||||||
|
- (id) initWithImage: (zbar_image_t*) image;
|
||||||
|
- (id) initWithCGImage: (CGImageRef) image;
|
||||||
|
- (id) initWithCGImage: (CGImageRef) image
|
||||||
|
size: (CGSize) size;
|
||||||
|
- (id) initWithCGImage: (CGImageRef) image
|
||||||
|
crop: (CGRect) crop
|
||||||
|
size: (CGSize) size;
|
||||||
|
|
||||||
|
- (void) setData: (const void*) data
|
||||||
|
withLength: (unsigned long) length;
|
||||||
|
- (UIImage*) UIImageWithOrientation: (UIImageOrientation) imageOrientation;
|
||||||
|
- (void) cleanup;
|
||||||
|
|
||||||
|
+ (unsigned long) fourcc: (NSString*) format;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
- convertToFormat: (unsigned long) format;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@end
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user