Remove Localytics and Google+ entirely.
This commit is contained in:
parent
1be65c0969
commit
fe2b6024bc
22
External/Localytics/LICENSE
vendored
22
External/Localytics/LICENSE
vendored
@ -1,22 +0,0 @@
|
|||||||
Copyright (c) 2013, Char Software, Inc. d/b/a Localytics
|
|
||||||
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.
|
|
||||||
* Neither the name of Char Software, Inc., Localytics 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 CHAR SOFTWARE, INC. D/B/A LOCALYTICS ''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 CHAR SOFTWARE, INC. D/B/A LOCALYTICS 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.
|
|
||||||
|
|
78
External/Localytics/LocalyticsDatabase.h
vendored
78
External/Localytics/LocalyticsDatabase.h
vendored
@ -1,78 +0,0 @@
|
|||||||
//
|
|
||||||
// LocalyticsDatabase.h
|
|
||||||
// Copyright (C) 2013 Char Software Inc., DBA Localytics
|
|
||||||
//
|
|
||||||
// This code is provided under the Localytics Modified BSD License.
|
|
||||||
// A copy of this license has been distributed in a file called LICENSE
|
|
||||||
// with this source code.
|
|
||||||
//
|
|
||||||
// Please visit www.localytics.com for more information.
|
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import <sqlite3.h>
|
|
||||||
|
|
||||||
#define MAX_DATABASE_SIZE 500000 // The maximum allowed disk size of the primary database file at open, in bytes
|
|
||||||
#define VACUUM_THRESHOLD 0.8 // The database is vacuumed after its size exceeds this proportion of the maximum.
|
|
||||||
|
|
||||||
@interface LocalyticsDatabase : NSObject {
|
|
||||||
sqlite3 *_databaseConnection;
|
|
||||||
}
|
|
||||||
|
|
||||||
@property (nonatomic, assign, readonly) BOOL firstRun;
|
|
||||||
|
|
||||||
- (unsigned long long)databaseSize;
|
|
||||||
- (int)eventCount;
|
|
||||||
- (NSTimeInterval)createdTimestamp;
|
|
||||||
|
|
||||||
- (BOOL)beginTransaction:(NSString *)name;
|
|
||||||
- (BOOL)releaseTransaction:(NSString *)name;
|
|
||||||
- (BOOL)rollbackTransaction:(NSString *)name;
|
|
||||||
|
|
||||||
- (BOOL)incrementLastUploadNumber:(int *)uploadNumber;
|
|
||||||
- (BOOL)incrementLastSessionNumber:(int *)sessionNumber;
|
|
||||||
|
|
||||||
- (BOOL)addEventWithBlobString:(NSString *)blob;
|
|
||||||
- (BOOL)addCloseEventWithBlobString:(NSString *)blob;
|
|
||||||
- (BOOL)queueCloseEventWithBlobString:(NSString *)blob;
|
|
||||||
- (NSString *)dequeueCloseEventBlobString;
|
|
||||||
- (BOOL)addFlowEventWithBlobString:(NSString *)blob;
|
|
||||||
- (BOOL)removeLastCloseAndFlowEvents;
|
|
||||||
|
|
||||||
- (BOOL)addHeaderWithSequenceNumber:(int)number blobString:(NSString *)blob rowId:(sqlite3_int64 *)insertedRowId;
|
|
||||||
- (int)unstagedEventCount;
|
|
||||||
- (BOOL)stageEventsForUpload:(sqlite3_int64)headerId;
|
|
||||||
- (BOOL)updateAppKey:(NSString *)appKey;
|
|
||||||
- (NSString *)uploadBlobString;
|
|
||||||
- (BOOL)deleteUploadedData;
|
|
||||||
- (BOOL)resetAnalyticsData;
|
|
||||||
- (BOOL)vacuumIfRequired;
|
|
||||||
|
|
||||||
- (NSTimeInterval)lastSessionStartTimestamp;
|
|
||||||
- (BOOL)setLastSessionStartTimestamp:(NSTimeInterval)timestamp;
|
|
||||||
|
|
||||||
- (BOOL)isOptedOut;
|
|
||||||
- (BOOL)setOptedOut:(BOOL)optOut;
|
|
||||||
- (NSString *)appVersion;
|
|
||||||
- (BOOL)updateAppVersion:(NSString *)appVersion;
|
|
||||||
- (NSString *)installId;
|
|
||||||
- (NSString *)appKey; // Most recent app key-- may not be that used to open the session.
|
|
||||||
|
|
||||||
- (NSString *)customDimension:(int)dimension;
|
|
||||||
- (BOOL)setCustomDimension:(int)dimension value:(NSString *)value;
|
|
||||||
|
|
||||||
- (BOOL)setValueForIdentifier:(NSString *)identifierName value:(NSString *)value;
|
|
||||||
- (NSString *)valueForIdentifier:(NSString *)identifierName;
|
|
||||||
- (BOOL)deleteIdentifer:(NSString *)identifierName;
|
|
||||||
- (NSDictionary *)identifiers;
|
|
||||||
|
|
||||||
- (BOOL)setFacebookAttribution:(NSString *)fbAttribution;
|
|
||||||
- (NSString *)facebookAttributionFromDb;
|
|
||||||
- (NSString *)facebookAttributionFromPasteboard;
|
|
||||||
|
|
||||||
- (NSInteger)safeIntegerValueFromDictionary:(NSDictionary *)dict forKey:(NSString *)key;
|
|
||||||
- (NSString *)safeStringValueFromDictionary:(NSDictionary *)dict forKey:(NSString *)key;
|
|
||||||
- (NSDictionary *)safeDictionaryFromDictionary:(NSDictionary *)dict forKey:(NSString *)key;
|
|
||||||
- (NSArray *)safeListFromDictionary:(NSDictionary *)dict forKey:(NSString *)key;
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
|
1408
External/Localytics/LocalyticsDatabase.m
vendored
1408
External/Localytics/LocalyticsDatabase.m
vendored
File diff suppressed because it is too large
Load Diff
107
External/Localytics/LocalyticsSession+Private.h
vendored
107
External/Localytics/LocalyticsSession+Private.h
vendored
@ -1,107 +0,0 @@
|
|||||||
// LocalyticsSession+Private.h
|
|
||||||
// Copyright (C) 2013 Char Software Inc., DBA Localytics
|
|
||||||
//
|
|
||||||
// This code is provided under the Localytics Modified BSD License.
|
|
||||||
// A copy of this license has been distributed in a file called LICENSE
|
|
||||||
// with this source code.
|
|
||||||
//
|
|
||||||
// Please visit www.localytics.com for more information.
|
|
||||||
|
|
||||||
#import "LocalyticsSession.h"
|
|
||||||
#import "LocalyticsUploader.h"
|
|
||||||
#import "LocalyticsDatabase.h"
|
|
||||||
|
|
||||||
#define CLIENT_VERSION_PREFIX @"iOS"
|
|
||||||
#define LOCALYTICS_LOGGING_ENABLED [[LocalyticsSession shared] loggingEnabled]
|
|
||||||
#define LocalyticsLog(message, ...)if([[LocalyticsSession shared] loggingEnabled]) \
|
|
||||||
[LocalyticsSession logMessage:[NSString stringWithFormat:@"%s:\n + " message "\n\n", __PRETTY_FUNCTION__, ##__VA_ARGS__]]
|
|
||||||
|
|
||||||
@interface LocalyticsSession()
|
|
||||||
{
|
|
||||||
BOOL _hasInitialized; // Whether or not the session object has been initialized.
|
|
||||||
BOOL _isSessionOpen; // Whether or not this session has been opened.
|
|
||||||
float _sessionTimeoutInterval; // If an App stays in the background for more
|
|
||||||
// than this many seconds, start a new session
|
|
||||||
// when it returns to foreground.
|
|
||||||
@private
|
|
||||||
#pragma mark Member Variables
|
|
||||||
dispatch_queue_t _queue; // Queue of Localytics block objects.
|
|
||||||
dispatch_group_t _criticalGroup; // Group of blocks the must complete before backgrounding.
|
|
||||||
NSString *_sessionUUID; // Unique identifier for this session.
|
|
||||||
NSString *_applicationKey; // Unique identifier for the instrumented application
|
|
||||||
NSString *_facebookAttribution; // Facebook attribution cookie
|
|
||||||
NSTimeInterval _lastSessionStartTimestamp; // The start time of the most recent session.
|
|
||||||
NSDate *_sessionResumeTime; // Time session was started or resumed.
|
|
||||||
NSDate *_sessionCloseTime; // Time session was closed.
|
|
||||||
NSMutableString *_unstagedFlowEvents; // Comma-delimited list of app screens and events tagged during this
|
|
||||||
// session that have NOT been staged for upload.
|
|
||||||
NSMutableString *_stagedFlowEvents; // App screens and events tagged during this session that HAVE been staged
|
|
||||||
// for upload.
|
|
||||||
NSMutableString *_screens; // Comma-delimited list of screens tagged during this session.
|
|
||||||
NSTimeInterval _sessionActiveDuration; // Duration that session open.
|
|
||||||
BOOL _sessionHasBeenOpen; // Whether or not this session has ever been open.
|
|
||||||
LocalyticsDatabase *_db; // Localytics database reference
|
|
||||||
LocalyticsUploader *_uploader; // Localytics uploader reference
|
|
||||||
}
|
|
||||||
|
|
||||||
@property (nonatomic, retain) NSString *applicationKey;
|
|
||||||
@property (nonatomic, retain) NSString *facebookAttribution;
|
|
||||||
@property (nonatomic,readonly) dispatch_queue_t queue;
|
|
||||||
@property (nonatomic,readonly) dispatch_group_t criticalGroup;
|
|
||||||
@property (atomic) BOOL isSessionOpen;
|
|
||||||
@property (atomic) BOOL hasInitialized;
|
|
||||||
@property (nonatomic, retain) NSString *sessionUUID;
|
|
||||||
@property (nonatomic, assign) NSTimeInterval lastSessionStartTimestamp;
|
|
||||||
@property (nonatomic, retain) NSDate *sessionResumeTime;
|
|
||||||
@property (nonatomic, retain) NSDate *sessionCloseTime;
|
|
||||||
@property (nonatomic, retain) NSMutableString *unstagedFlowEvents;
|
|
||||||
@property (nonatomic, retain) NSMutableString *stagedFlowEvents;
|
|
||||||
@property (nonatomic, retain) NSMutableString *screens;
|
|
||||||
@property (nonatomic, assign) NSTimeInterval sessionActiveDuration;
|
|
||||||
@property (nonatomic, assign) BOOL sessionHasBeenOpen;
|
|
||||||
@property (nonatomic, assign) NSInteger sessionNumber;
|
|
||||||
@property (nonatomic, assign) BOOL needsSessionStartActions;
|
|
||||||
@property (nonatomic, assign) BOOL needsFirstRunActions;
|
|
||||||
@property (nonatomic, assign) BOOL needsUpgradeActions;
|
|
||||||
|
|
||||||
// Private methods.
|
|
||||||
+ (id)allocFactory;
|
|
||||||
- (void)reopenPreviousSession;
|
|
||||||
- (void)addFlowEventWithName:(NSString *)name type:(NSString *)eventType;
|
|
||||||
- (void)addScreenWithName:(NSString *)name;
|
|
||||||
- (NSString *)blobHeaderStringWithSequenceNumber:(int)nextSequenceNumber;
|
|
||||||
- (BOOL)ll_isOptedIn;
|
|
||||||
- (BOOL)createOptEvent:(BOOL)optState;
|
|
||||||
- (BOOL)saveApplicationFlowAndRemoveOnResume:(BOOL)removeOnResume;
|
|
||||||
- (NSString *)formatAttributeWithName:(NSString *)paramName value:(NSString *)paramValue;
|
|
||||||
- (NSString *)formatAttributeWithName:(NSString *)paramName value:(NSString *)paramValue first:(BOOL)firstAttribute;
|
|
||||||
- (void)uploadCallback:(NSDictionary*)info;
|
|
||||||
+ (BOOL)appKeyIsValid:(NSString *)appKey;
|
|
||||||
- (void)ll_open;
|
|
||||||
- (LocalyticsDatabase *)db;
|
|
||||||
- (LocalyticsUploader *)uploader;
|
|
||||||
- (BOOL)uploadIsNeeded;
|
|
||||||
- (void)onStartSession;
|
|
||||||
- (void)onFirstRun;
|
|
||||||
- (void)onUpgrade;
|
|
||||||
|
|
||||||
// Datapoint methods.
|
|
||||||
- (NSString *)customDimensions;
|
|
||||||
- (NSString *)locationDimensions;
|
|
||||||
- (NSString *)hashString:(NSString *)input;
|
|
||||||
- (NSString *)randomUUID;
|
|
||||||
- (NSString *)escapeString:(NSString *)input;
|
|
||||||
- (NSString *)installationId;
|
|
||||||
- (NSString *)appVersion;
|
|
||||||
- (NSTimeInterval)currentTimestamp;
|
|
||||||
- (BOOL)isDeviceJailbroken;
|
|
||||||
- (NSString *)deviceModel;
|
|
||||||
- (NSString *)modelSizeString;
|
|
||||||
- (double)availableMemory;
|
|
||||||
- (NSString *)advertisingIdentifier;
|
|
||||||
- (NSString *)uniqueDeviceIdentifier;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
301
External/Localytics/LocalyticsSession.h
vendored
301
External/Localytics/LocalyticsSession.h
vendored
@ -1,301 +0,0 @@
|
|||||||
// LocalyticsSession.h
|
|
||||||
// Copyright (C) 2013 Char Software Inc., DBA Localytics
|
|
||||||
//
|
|
||||||
// This code is provided under the Localytics Modified BSD License.
|
|
||||||
// A copy of this license has been distributed in a file called LICENSE
|
|
||||||
// with this source code.
|
|
||||||
//
|
|
||||||
// Please visit www.localytics.com for more information.
|
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
|
||||||
#import <CoreLocation/CoreLocation.h>
|
|
||||||
|
|
||||||
#define CLIENT_VERSION @"2.18.0"
|
|
||||||
#define MARKETING_PLATFORM
|
|
||||||
|
|
||||||
// Forward declaration
|
|
||||||
@protocol LocalyticsSessionDelegate;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@class LocalyticsSession
|
|
||||||
@discussion The class which manages creating, collecting, & uploading a Localytics session.
|
|
||||||
Please see the following guides for information on how to best use this
|
|
||||||
library, sample code, and other useful information:
|
|
||||||
<ul>
|
|
||||||
<li><a href="http://wiki.localytics.com/index.php?title=Developer's_Integration_Guide">
|
|
||||||
Main Developer's Integration Guide</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<strong>Best Practices</strong>
|
|
||||||
<ul>
|
|
||||||
<li>Instantiate the LocalyticsSession object in applicationDidFinishLaunching.</li>
|
|
||||||
<li>Open your session and begin your uploads in applicationDidFinishLaunching. This way the
|
|
||||||
upload has time to complete and it all happens before your users have a
|
|
||||||
chance to begin any data intensive actions of their own.</li>
|
|
||||||
<li>Close the session in applicationWillTerminate, and in applicationDidEnterBackground.</li>
|
|
||||||
<li>Resume the session in applicationWillEnterForeground.</li>
|
|
||||||
<li>Do not call any Localytics functions inside a loop. Instead, calls
|
|
||||||
such as <code>tagEvent</code> should follow user actions. This limits the
|
|
||||||
amount of data which is stored and uploaded.</li>
|
|
||||||
<li>Do not use multiple LocalticsSession objects to upload data with
|
|
||||||
multiple application keys. This can cause invalid state.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
@author Localytics
|
|
||||||
*/
|
|
||||||
@interface LocalyticsSession : NSObject
|
|
||||||
|
|
||||||
|
|
||||||
+ (void)logMessage:(NSString *)message;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@property enableHTTPS
|
|
||||||
@abstract (Optional) Determines whether or not HTTPS is used when calling the Localytics
|
|
||||||
post URL. The default is NO.
|
|
||||||
*/
|
|
||||||
@property (nonatomic, assign) BOOL enableHTTPS;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@property loggingEnabled
|
|
||||||
@abstract (Optional) Determines whether or Localytics debugging information is shown
|
|
||||||
to the console. The default is NO
|
|
||||||
*/
|
|
||||||
@property (nonatomic, assign) BOOL loggingEnabled;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@property sessionTimeoutInterval
|
|
||||||
@abstract (Optional) If an App stays in the background for more than this many seconds,
|
|
||||||
start a new session when it returns to foreground.
|
|
||||||
*/
|
|
||||||
@property (atomic) float sessionTimeoutInterval;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@property localyticsDelegate
|
|
||||||
@abstract (Optional) Assign this delegate to the class you'd like to register to recieve
|
|
||||||
the Localytics delegate callbacks (Defined at the end of this file)
|
|
||||||
*/
|
|
||||||
@property (nonatomic, assign) id<LocalyticsSessionDelegate> localyticsDelegate;
|
|
||||||
|
|
||||||
#pragma mark Public Methods
|
|
||||||
/*!
|
|
||||||
@method shared
|
|
||||||
@abstract Accesses the Session object. This is a Singleton class which maintains
|
|
||||||
a single session throughout your application. It is possible to manage your own
|
|
||||||
session, but this is the easiest way to access the Localytics object throughout your code.
|
|
||||||
The class is accessed within the code using the following syntax:
|
|
||||||
[[LocalyticsSession shared] functionHere]
|
|
||||||
So, to tag an event, all that is necessary, anywhere in the code is:
|
|
||||||
[[LocalyticsSession shared] tagEvent:@"MY_EVENT"];
|
|
||||||
*/
|
|
||||||
+ (LocalyticsSession *)sharedLocalyticsSession;
|
|
||||||
+ (LocalyticsSession *)shared;
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method startSession
|
|
||||||
@abstract An optional convenience initialize method that also calls the LocalyticsSession, open &
|
|
||||||
upload methods. Best Practice is to call open & upload immediately after Localytics Session when loading an app,
|
|
||||||
this method fascilitates that behavior.
|
|
||||||
It is recommended that this call be placed in <code>applicationDidFinishLaunching</code>.
|
|
||||||
@param appKey The key unique for each application generated
|
|
||||||
at www.localytics.com
|
|
||||||
*/
|
|
||||||
- (void)startSession:(NSString *)appKey;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method open
|
|
||||||
@abstract Opens the Localytics session. Not necessary if you choose to use startSession.
|
|
||||||
The session time as presented on the website is the time between <code>open</code> and the
|
|
||||||
final <code>close</code> so it is recommended to open the session as early as possible, and close
|
|
||||||
it at the last moment. The session must be opened before any tags can
|
|
||||||
be written. It is recommended that this call be placed in <code>applicationDidFinishLaunching</code>.
|
|
||||||
<br>
|
|
||||||
If for any reason this is called more than once every subsequent open call
|
|
||||||
will be ignored.
|
|
||||||
*/
|
|
||||||
- (void)open;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method resume
|
|
||||||
@abstract Resumes the Localytics session. When the App enters the background, the session is
|
|
||||||
closed and the time of closing is recorded. When the app returns to the foreground, the session
|
|
||||||
is resumed. If the time since closing is greater than BACKGROUND_SESSION_TIMEOUT, (15 seconds
|
|
||||||
by default) a new session is created, and uploading is triggered. Otherwise, the previous session
|
|
||||||
is reopened.
|
|
||||||
*/
|
|
||||||
- (void)resume;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method close
|
|
||||||
@abstract Closes the Localytics session. This should be called in
|
|
||||||
<code>applicationWillTerminate</code>.
|
|
||||||
<br>
|
|
||||||
If close is not called, the session will still be uploaded but no
|
|
||||||
events will be processed and the session time will not appear. This is
|
|
||||||
because the session is not yet closed so it should not be used in
|
|
||||||
comparison with sessions which are closed.
|
|
||||||
*/
|
|
||||||
- (void)close;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method tagEvent
|
|
||||||
@abstract Allows a session to tag a particular event as having occurred. For
|
|
||||||
example, if a view has three buttons, it might make sense to tag
|
|
||||||
each button click with the name of the button which was clicked.
|
|
||||||
For another example, in a game with many levels it might be valuable
|
|
||||||
to create a new tag every time the user gets to a new level in order
|
|
||||||
to determine how far the average user is progressing in the game.
|
|
||||||
<br>
|
|
||||||
<strong>Tagging Best Practices</strong>
|
|
||||||
<ul>
|
|
||||||
<li>DO NOT use tags to record personally identifiable information.</li>
|
|
||||||
<li>The best way to use tags is to create all the tag strings as predefined
|
|
||||||
constants and only use those. This is more efficient and removes the risk of
|
|
||||||
collecting personal information.</li>
|
|
||||||
<li>Do not set tags inside loops or any other place which gets called
|
|
||||||
frequently. This can cause a lot of data to be stored and uploaded.</li>
|
|
||||||
</ul>
|
|
||||||
<br>
|
|
||||||
See the tagging guide at: http://wiki.localytics.com/
|
|
||||||
@param event The name of the event which occurred.
|
|
||||||
@param attributes (Optional) An object/hash/dictionary of key-value pairs, contains
|
|
||||||
contextual data specific to the event.
|
|
||||||
@param reportAttributes (Optional) Additional attributes used for custom reporting.
|
|
||||||
Available to Enterprise customers, please contact services for more details.
|
|
||||||
@param customerValueIncrease (Optional) Numeric value, added to customer lifetime value.
|
|
||||||
Integer expected. Try to use lowest possible unit, such as cents for US currency.
|
|
||||||
*/
|
|
||||||
- (void)tagEvent:(NSString *)event
|
|
||||||
attributes:(NSDictionary *)attributes
|
|
||||||
reportAttributes:(NSDictionary *)reportAttributes
|
|
||||||
customerValueIncrease:(NSNumber *)customerValueIncrease;
|
|
||||||
|
|
||||||
- (void)tagEvent:(NSString *)event
|
|
||||||
attributes:(NSDictionary *)attributes
|
|
||||||
reportAttributes:(NSDictionary *)reportAttributes;
|
|
||||||
|
|
||||||
- (void)tagEvent:(NSString *)event
|
|
||||||
attributes:(NSDictionary *)attributes
|
|
||||||
customerValueIncrease:(NSNumber *)customerValueIncrease;
|
|
||||||
|
|
||||||
- (void)tagEvent:(NSString *)event
|
|
||||||
attributes:(NSDictionary *)attributes;
|
|
||||||
|
|
||||||
- (void)tagEvent:(NSString *)event;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method tagScreen
|
|
||||||
@abstract Allows tagging the flow of screens encountered during the session.
|
|
||||||
@param screen The name of the screen
|
|
||||||
*/
|
|
||||||
- (void)tagScreen:(NSString *)screen;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method upload
|
|
||||||
@abstract Creates a low priority thread which uploads any Localytics data already stored
|
|
||||||
on the device. This should be done early in the process life in order to
|
|
||||||
guarantee as much time as possible for slow connections to complete. It is also reasonable
|
|
||||||
to upload again when the application is exiting because if the upload is cancelled the data
|
|
||||||
will just get uploaded the next time the app comes up.
|
|
||||||
*/
|
|
||||||
- (void)upload;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method LocalyticsSession
|
|
||||||
@abstract Initializes the Localytics Object. Not necessary if you choose to use startSession.
|
|
||||||
@param appKey The key unique for each application generated at www.localytics.com
|
|
||||||
*/
|
|
||||||
- (void)LocalyticsSession:(NSString *)appKey;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method setOptIn
|
|
||||||
@abstract (OPTIONAL) Allows the application to control whether or not it will collect user data.
|
|
||||||
Even if this call is used, it is necessary to continue calling upload(). No new data will be
|
|
||||||
collected, so nothing new will be uploaded but it is necessary to upload an event telling the
|
|
||||||
server this user has opted out.
|
|
||||||
@param optedIn True if the user is opted in, false otherwise.
|
|
||||||
*/
|
|
||||||
- (void)setOptIn:(BOOL)optedIn;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method setLocation
|
|
||||||
@abstract Stores the user's location. This will be used in all event and session calls.
|
|
||||||
If your application has already collected the user's location, it may be passed to Localytics
|
|
||||||
via this function. This will cause all events and the session close to include the locatin
|
|
||||||
information. It is not required that you call this function.
|
|
||||||
@param deviceLocation The user's location.
|
|
||||||
*/
|
|
||||||
- (void)setLocation:(CLLocationCoordinate2D)deviceLocation;
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method setCustomDimension
|
|
||||||
@abstract Sets the value of a custom dimension. Custom dimensions are dimensions
|
|
||||||
which contain user defined data unlike the predefined dimensions such as carrier, model, and country.
|
|
||||||
Once a value for a custom dimension is set, the device it was set on will continue to upload that value
|
|
||||||
until the value is changed. To clear a value pass nil as the value.
|
|
||||||
The proper use of custom dimensions involves defining a dimension with less than ten distinct possible
|
|
||||||
values and assigning it to one of the four available custom dimensions. Once assigned this definition should
|
|
||||||
never be changed without changing the App Key otherwise old installs of the application will pollute new data.
|
|
||||||
*/
|
|
||||||
- (void)setCustomDimension:(int)dimension value:(NSString *)value;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method customDimension
|
|
||||||
@abstract Gets the custom dimension value for a given dimension. Avoid calling this on the main thread, as it
|
|
||||||
may take some time for all pending database execution. */
|
|
||||||
- (NSString *)customDimension:(int)dimension;
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method setValueForIdentifier
|
|
||||||
@abstract Sets the value of a custom identifier. Identifiers are a form of key/value storage
|
|
||||||
which contain custom user data. Identifiers might include things like email addresses, customer IDs, twitter
|
|
||||||
handles, and facebook IDs.
|
|
||||||
Once a value is set, the device it was set on will continue to upload that value until the value is changed.
|
|
||||||
To delete a property, pass in nil as the value.
|
|
||||||
*/
|
|
||||||
- (void)setValueForIdentifier:(NSString *)identifierName value:(NSString *)value;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method setCustomerName
|
|
||||||
@abstract Record the customer name
|
|
||||||
Once this value is set, the device it was set on will continue to upload that value until the value is changed.
|
|
||||||
To delete the value, pass in nil.
|
|
||||||
*/
|
|
||||||
- (void)setCustomerName:(NSString *)email;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method setCustomerId
|
|
||||||
@abstract Record your custom customer identifier
|
|
||||||
Once this value is set, the device it was set on will continue to upload that value until the value is changed.
|
|
||||||
To delete the value, pass in nil.
|
|
||||||
*/
|
|
||||||
- (void)setCustomerId:(NSString *)customerId;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method setCustomerId
|
|
||||||
@abstract Record the customer's email address
|
|
||||||
Once this value is set, the device it was set on will continue to upload that value until the value is changed.
|
|
||||||
To delete the value, pass in nil.
|
|
||||||
*/
|
|
||||||
- (void)setCustomerEmail:(NSString *)email;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@protocol LocalyticsSessionDelegate <NSObject>
|
|
||||||
@optional
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method localyticsResumedSession
|
|
||||||
@abstract Register for this callback to be notified when Localytics has either
|
|
||||||
resumed a previous session or created a new one. See the on the 'resume' method
|
|
||||||
for additional details.
|
|
||||||
@param didResumeExistingSession This flag will indicate if Localytics restored an existing
|
|
||||||
session or started a new one.
|
|
||||||
*/
|
|
||||||
- (void)localyticsResumedSession:(BOOL)didResumeExistingSession;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
|
|
1492
External/Localytics/LocalyticsSession.m
vendored
1492
External/Localytics/LocalyticsSession.m
vendored
File diff suppressed because it is too large
Load Diff
65
External/Localytics/LocalyticsUploader.h
vendored
65
External/Localytics/LocalyticsUploader.h
vendored
@ -1,65 +0,0 @@
|
|||||||
// LocalyticsUploader.h
|
|
||||||
// Copyright (C) 2013 Char Software Inc., DBA Localytics
|
|
||||||
//
|
|
||||||
// This code is provided under the Localytics Modified BSD License.
|
|
||||||
// A copy of this license has been distributed in a file called LICENSE
|
|
||||||
// with this source code.
|
|
||||||
//
|
|
||||||
// Please visit www.localytics.com for more information.
|
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
|
||||||
|
|
||||||
extern NSString * const kLocalyticsKeyResponseBody;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@class LocalyticsUploader
|
|
||||||
@discussion Singleton class to handle data uploads
|
|
||||||
*/
|
|
||||||
|
|
||||||
@interface LocalyticsUploader : NSObject {
|
|
||||||
}
|
|
||||||
|
|
||||||
@property (readonly, atomic) BOOL isUploading;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method LocalyticsUploader
|
|
||||||
@abstract Creates a thread which uploads all queued header and event data.
|
|
||||||
All files starting with sessionFilePrefix are renamed,
|
|
||||||
uploaded and deleted on upload. This way the sessions can continue
|
|
||||||
writing data regardless of whether or not the upload succeeds. Files
|
|
||||||
which have been renamed still count towards the total number of Localytics
|
|
||||||
files which can be stored on the disk.
|
|
||||||
|
|
||||||
This version of the method now just calls the second version of it with a nil target and NULL callback method.
|
|
||||||
@param localyticsApplicationKey the Localytics application ID
|
|
||||||
@param useHTTPS Flag determining whether HTTP or HTTPS is used for the post URL.
|
|
||||||
@param installId Install id passed to the server in the x-install-id header field.
|
|
||||||
@param libraryVersion Library version to be passed to the server in the x-client-version header field.
|
|
||||||
*/
|
|
||||||
- (void)uploaderWithApplicationKey:(NSString *)localyticsApplicationKey useHTTPS:(BOOL)useHTTPS installId:(NSString *)installId libraryVersion:(NSString *)libraryVersion;
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method LocalyticsUploader
|
|
||||||
@abstract Creates a thread which uploads all queued header and event data.
|
|
||||||
All files starting with sessionFilePrefix are renamed,
|
|
||||||
uploaded and deleted on upload. This way the sessions can continue
|
|
||||||
writing data regardless of whether or not the upload succeeds. Files
|
|
||||||
which have been renamed still count towards the total number of Localytics
|
|
||||||
files which can be stored on the disk.
|
|
||||||
@param localyticsApplicationKey the Localytics application ID
|
|
||||||
@param useHTTPS Flag determining whether HTTP or HTTPS is used for the post URL.
|
|
||||||
@param installId Install id passed to the server in the x-install-id header field.
|
|
||||||
@param libraryVersion Library version to be passed to the server in the x-client-version header field.
|
|
||||||
@param resultTarget Result target is the target for the callback method that knows how to handle response data
|
|
||||||
@param callback Callback is the method of the target class that is to be called with the data begin returned by an upload
|
|
||||||
*/
|
|
||||||
- (void)uploaderWithApplicationKey:(NSString *)localyticsApplicationKey useHTTPS:(BOOL)useHTTPS installId:(NSString *)installId libraryVersion:(NSString *)libraryVersion resultTarget:(id)target callback:(SEL)callbackMethod;
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method uploadTimeStamp
|
|
||||||
@abstract Retrieve upload TimeStamp.
|
|
||||||
*/
|
|
||||||
- (NSString *)uploadTimeStamp;
|
|
||||||
|
|
||||||
@end
|
|
269
External/Localytics/LocalyticsUploader.m
vendored
269
External/Localytics/LocalyticsUploader.m
vendored
@ -1,269 +0,0 @@
|
|||||||
// LocalyticsUploader.m
|
|
||||||
// Copyright (C) 2013 Char Software Inc., DBA Localytics
|
|
||||||
//
|
|
||||||
// This code is provided under the Localytics Modified BSD License.
|
|
||||||
// A copy of this license has been distributed in a file called LICENSE
|
|
||||||
// with this source code.
|
|
||||||
//
|
|
||||||
// Please visit www.localytics.com for more information.
|
|
||||||
|
|
||||||
#import "LocalyticsUploader.h"
|
|
||||||
#import "LocalyticsSession.h"
|
|
||||||
#import "LocalyticsSession+Private.h"
|
|
||||||
#import "LocalyticsDatabase.h"
|
|
||||||
#import "WebserviceConstants.h"
|
|
||||||
#import <zlib.h>
|
|
||||||
|
|
||||||
#ifndef LOCALYTICS_URL
|
|
||||||
#define LOCALYTICS_URL @"http://analytics.localytics.com/api/v2/applications/%@/uploads"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LOCALYTICS_URL_SECURED
|
|
||||||
#define LOCALYTICS_URL_SECURED @"https://analytics.localytics.com/api/v2/applications/%@/uploads"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
NSString * const kLocalyticsKeyResponseBody = @"localytics.key.responseBody";
|
|
||||||
|
|
||||||
@interface LocalyticsUploader ()
|
|
||||||
- (void)finishUpload;
|
|
||||||
- (NSData *)gzipDeflatedDataWithData:(NSData *)data;
|
|
||||||
|
|
||||||
@property (readwrite) BOOL isUploading;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation LocalyticsUploader
|
|
||||||
@synthesize isUploading = _isUploading;
|
|
||||||
|
|
||||||
#pragma mark - Class Methods
|
|
||||||
|
|
||||||
- (void)uploaderWithApplicationKey:(NSString *)localyticsApplicationKey useHTTPS:(BOOL)useHTTPS installId:(NSString *)installId libraryVersion:(NSString *)libraryVersion
|
|
||||||
{
|
|
||||||
[self uploaderWithApplicationKey:localyticsApplicationKey useHTTPS:useHTTPS installId:installId libraryVersion:libraryVersion resultTarget:nil callback:NULL];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
- (void)uploaderWithApplicationKey:(NSString *)localyticsApplicationKey useHTTPS:(BOOL)useHTTPS installId:(NSString *)installId libraryVersion:(NSString *)libraryVersion resultTarget:(id)target callback:(SEL)callbackMethod
|
|
||||||
{
|
|
||||||
|
|
||||||
// Do nothing if already uploading.
|
|
||||||
if (self.isUploading == true)
|
|
||||||
{
|
|
||||||
LocalyticsLog("Upload already in progress. Aborting.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LocalyticsLog("Beginning upload process");
|
|
||||||
self.isUploading = true;
|
|
||||||
|
|
||||||
// Prepare the data for upload. The upload could take a long time, so some effort has to be made to be sure that events
|
|
||||||
// which get written while the upload is taking place don't get lost or duplicated. To achieve this, the logic is:
|
|
||||||
// 1) Append every header row blob string and and those of its associated events to the upload string.
|
|
||||||
// 2) Deflate and upload the data.
|
|
||||||
// 3) On success, delete all blob headers and staged events. Events added while an upload is in process are not
|
|
||||||
// deleted because they are not associated a header (and cannot be until the upload completes).
|
|
||||||
|
|
||||||
// Step 1
|
|
||||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
|
||||||
|
|
||||||
LocalyticsDatabase *db = [[LocalyticsSession shared] db];
|
|
||||||
NSString *blobString = [db uploadBlobString];
|
|
||||||
|
|
||||||
if ([blobString length] == 0) {
|
|
||||||
// There is nothing outstanding to upload.
|
|
||||||
LocalyticsLog("Abandoning upload. There are no new events.");
|
|
||||||
[pool drain];
|
|
||||||
[self finishUpload];
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSData *requestData = [blobString dataUsingEncoding:NSUTF8StringEncoding];
|
|
||||||
if(LOCALYTICS_LOGGING_ENABLED) {
|
|
||||||
NSString *logString = [[[NSString alloc] initWithData:requestData
|
|
||||||
encoding:NSUTF8StringEncoding] autorelease];
|
|
||||||
NSUInteger stringLength = [logString length];
|
|
||||||
|
|
||||||
logString = [logString stringByReplacingOccurrencesOfString:@"{"
|
|
||||||
withString:@"\n\t{"];
|
|
||||||
logString = [logString stringByReplacingOccurrencesOfString:@",\""
|
|
||||||
withString:@",\n\t\""];
|
|
||||||
|
|
||||||
LocalyticsLog("Uploading data (length: %u)\n%@",
|
|
||||||
stringLength,
|
|
||||||
logString);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 2
|
|
||||||
NSData *deflatedRequestData = [[self gzipDeflatedDataWithData:requestData] retain];
|
|
||||||
|
|
||||||
[pool drain];
|
|
||||||
|
|
||||||
NSString *urlStringFormat;
|
|
||||||
if (useHTTPS) {
|
|
||||||
urlStringFormat = LOCALYTICS_URL_SECURED;
|
|
||||||
} else {
|
|
||||||
urlStringFormat = LOCALYTICS_URL;
|
|
||||||
}
|
|
||||||
NSURL *apiUrl = [NSURL URLWithString:[NSString stringWithFormat:urlStringFormat,[localyticsApplicationKey stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
|
|
||||||
NSMutableURLRequest *submitRequest = [self createRequestWithURL:apiUrl
|
|
||||||
installId:installId
|
|
||||||
libraryVersion:libraryVersion
|
|
||||||
requestData:deflatedRequestData];
|
|
||||||
|
|
||||||
[deflatedRequestData release];
|
|
||||||
|
|
||||||
// Perform synchronous upload in an async dispatch. This is necessary because the calling block will not persist to
|
|
||||||
// receive the response data.
|
|
||||||
dispatch_group_async([[LocalyticsSession shared] criticalGroup], [[LocalyticsSession shared] queue], ^{
|
|
||||||
@try {
|
|
||||||
NSURLResponse *response = nil;
|
|
||||||
NSError *responseError = nil;
|
|
||||||
NSData *responseData = [NSURLConnection sendSynchronousRequest:submitRequest returningResponse:&response error:&responseError];
|
|
||||||
NSInteger responseStatusCode = [(NSHTTPURLResponse *)response statusCode];
|
|
||||||
|
|
||||||
if (responseError) {
|
|
||||||
// On error, simply print the error and close the uploader. We have to assume the data was not transmited
|
|
||||||
// so it is not deleted. In the event that we accidently store data which was succesfully uploaded, the
|
|
||||||
// duplicate data will be ignored by the server when it is next uploaded.
|
|
||||||
LocalyticsLog("Error Uploading. Code: %d, Description: %@",
|
|
||||||
[responseError code],
|
|
||||||
[responseError localizedDescription]);
|
|
||||||
} else {
|
|
||||||
// Step 3
|
|
||||||
// While response status codes in the 5xx range leave upload rows intact, the default case is to delete.
|
|
||||||
if (responseStatusCode >= 500 && responseStatusCode < 600) {
|
|
||||||
LocalyticsLog("Upload failed with response status code %d", responseStatusCode);
|
|
||||||
} else {
|
|
||||||
// Because only one instance of the uploader can be running at a time it should not be possible for
|
|
||||||
// new upload rows to appear so there is no fear of deleting data which has not yet been uploaded.
|
|
||||||
LocalyticsLog("Upload completed successfully. Response code %d", responseStatusCode);
|
|
||||||
[[[LocalyticsSession shared] db] deleteUploadedData];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ([responseData length] > 0) {
|
|
||||||
if (LOCALYTICS_LOGGING_ENABLED) {
|
|
||||||
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
|
|
||||||
LocalyticsLog("Response body: %@", responseString);
|
|
||||||
[responseString release];
|
|
||||||
}
|
|
||||||
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:responseData forKey:kLocalyticsKeyResponseBody];
|
|
||||||
if (target) {
|
|
||||||
[target performSelector:callbackMethod withObject:userInfo];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[self finishUpload];
|
|
||||||
}
|
|
||||||
@catch (NSException * e) {}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSMutableURLRequest *)createRequestWithURL:(NSURL *)URL installId:(NSString *)installId libraryVersion:(NSString *)libraryVersion requestData:(NSData *)requestData
|
|
||||||
{
|
|
||||||
|
|
||||||
NSMutableURLRequest *submitRequest = [NSMutableURLRequest requestWithURL:URL
|
|
||||||
cachePolicy:NSURLRequestReloadIgnoringCacheData
|
|
||||||
timeoutInterval:60.0];
|
|
||||||
[submitRequest setHTTPMethod:@"POST"];
|
|
||||||
[submitRequest setValue:[self uploadTimeStamp] forHTTPHeaderField:HEADER_CLIENT_TIME];
|
|
||||||
[submitRequest setValue:installId forHTTPHeaderField:HEADER_INSTALL_ID];
|
|
||||||
[submitRequest setValue:libraryVersion forHTTPHeaderField:HEADER_CLIENT_VERSION];
|
|
||||||
[submitRequest setValue:@"application/x-gzip" forHTTPHeaderField:@"Content-Type"];
|
|
||||||
[submitRequest setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"];
|
|
||||||
[submitRequest setValue:[NSString stringWithFormat:@"%d", requestData.length] forHTTPHeaderField:@"Content-Length"];
|
|
||||||
|
|
||||||
[submitRequest setHTTPBody:requestData];
|
|
||||||
|
|
||||||
return submitRequest;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)finishUpload
|
|
||||||
{
|
|
||||||
self.isUploading = false;
|
|
||||||
|
|
||||||
// Upload data has been deleted. Recover the disk space if necessary.
|
|
||||||
[[[LocalyticsSession shared] db] vacuumIfRequired];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method gzipDeflatedDataWithData
|
|
||||||
@abstract Deflates the provided data using gzip at the default compression level (6).
|
|
||||||
@return the deflated data
|
|
||||||
*/
|
|
||||||
- (NSData *)gzipDeflatedDataWithData:(NSData *)data
|
|
||||||
{
|
|
||||||
if ([data length] == 0) return data;
|
|
||||||
|
|
||||||
z_stream strm;
|
|
||||||
|
|
||||||
strm.zalloc = Z_NULL;
|
|
||||||
strm.zfree = Z_NULL;
|
|
||||||
strm.opaque = Z_NULL;
|
|
||||||
strm.total_out = 0;
|
|
||||||
strm.next_in=(Bytef *)[data bytes];
|
|
||||||
strm.avail_in = [data length];
|
|
||||||
|
|
||||||
// Compresssion Levels:
|
|
||||||
// Z_NO_COMPRESSION
|
|
||||||
// Z_BEST_SPEED
|
|
||||||
// Z_BEST_COMPRESSION
|
|
||||||
// Z_DEFAULT_COMPRESSION
|
|
||||||
|
|
||||||
if (deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, (15+16), 8, Z_DEFAULT_STRATEGY) != Z_OK) return nil;
|
|
||||||
|
|
||||||
NSMutableData *compressed = [NSMutableData dataWithLength:16384]; // 16K chunks for expansion
|
|
||||||
|
|
||||||
do {
|
|
||||||
|
|
||||||
if (strm.total_out >= [compressed length])
|
|
||||||
[compressed increaseLengthBy: 16384];
|
|
||||||
|
|
||||||
strm.next_out = [compressed mutableBytes] + strm.total_out;
|
|
||||||
strm.avail_out = [compressed length] - strm.total_out;
|
|
||||||
|
|
||||||
deflate(&strm, Z_FINISH);
|
|
||||||
|
|
||||||
} while (strm.avail_out == 0);
|
|
||||||
|
|
||||||
deflateEnd(&strm);
|
|
||||||
|
|
||||||
[compressed setLength: strm.total_out];
|
|
||||||
return [NSData dataWithData:compressed];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
@method uploadTimeStamp
|
|
||||||
@abstract Gets the current time, along with local timezone, formatted as a DateTime for the webservice.
|
|
||||||
@return a DateTime of the current local time and timezone.
|
|
||||||
*/
|
|
||||||
- (NSString *)uploadTimeStamp {
|
|
||||||
return [ NSString stringWithFormat:@"%ld", (long)[[NSDate date] timeIntervalSince1970] ];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - System Functions
|
|
||||||
|
|
||||||
- (id)copyWithZone:(NSZone *)zone {
|
|
||||||
#pragma unused(zone)
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)retain {
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (unsigned)retainCount {
|
|
||||||
// maximum value of an unsigned int - prevents additional retains for the class
|
|
||||||
return UINT_MAX;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (oneway void)release {
|
|
||||||
// ignore release commands
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)autorelease {
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
123
External/Localytics/WebserviceConstants.h
vendored
123
External/Localytics/WebserviceConstants.h
vendored
@ -1,123 +0,0 @@
|
|||||||
// WebserviceConstants.h
|
|
||||||
// Copyright (C) 2013 Char Software Inc., DBA Localytics
|
|
||||||
//
|
|
||||||
// This code is provided under the Localytics Modified BSD License.
|
|
||||||
// A copy of this license has been distributed in a file called LICENSE
|
|
||||||
// with this source code.
|
|
||||||
//
|
|
||||||
// Please visit www.localytics.com for more information.
|
|
||||||
|
|
||||||
// The constants which are used to make up the JSON blob
|
|
||||||
// To save disk space and network bandwidth all the keywords have been
|
|
||||||
// abbreviated and are exploded by the server.
|
|
||||||
|
|
||||||
/*****************
|
|
||||||
* Upload Header *
|
|
||||||
*****************/
|
|
||||||
#define HEADER_CLIENT_TIME @"x-upload-time"
|
|
||||||
#define HEADER_INSTALL_ID @"x-install-id"
|
|
||||||
#define HEADER_CLIENT_VERSION @"x-client-version"
|
|
||||||
|
|
||||||
/*********************
|
|
||||||
* Shared Attributes *
|
|
||||||
*********************/
|
|
||||||
#define PARAM_UUID @"u" // UUID for JSON document
|
|
||||||
#define PARAM_DATA_TYPE @"dt" // Data Type
|
|
||||||
#define PARAM_CLIENT_TIME @"ct" // Client Time, seconds from Unix epoch (int)
|
|
||||||
#define PARAM_LATITUDE @"lat" // Latitude - if available
|
|
||||||
#define PARAM_LONGITUDE @"lon" // Longitude - if available
|
|
||||||
#define PARAM_SESSION_UUID @"su" // UUID for an existing session
|
|
||||||
#define PARAM_NEW_SESSION_UUID @"u" // UUID for a new session
|
|
||||||
#define PARAM_ATTRIBUTES @"attrs" // Attributes (dictionary)
|
|
||||||
#define PARAM_SESSION_ELAPSE_TIME @"sl" // Number of seconds since the previous session start
|
|
||||||
|
|
||||||
/***************
|
|
||||||
* Blob Header *
|
|
||||||
***************/
|
|
||||||
|
|
||||||
// PARAM_UUID
|
|
||||||
// PARAM_DATA_TYPE => "h" for Header
|
|
||||||
// PARAM_ATTRIBUTES => dictionary containing Header Common Attributes
|
|
||||||
#define PARAM_PERSISTED_AT @"pa" // Persistent Storage Created At. A timestamp created when the app was
|
|
||||||
// first launched and the persistent storage was created. Stores as
|
|
||||||
// seconds from Unix epoch. (int)
|
|
||||||
#define PARAM_SEQUENCE_NUMBER @"seq" // Sequence number - an increasing count for each blob, stored in the
|
|
||||||
// persistent store Consistent across app starts. (int)
|
|
||||||
|
|
||||||
/****************************
|
|
||||||
* Header Common Attributes *
|
|
||||||
****************************/
|
|
||||||
|
|
||||||
// PARAM_DATA_TYPE
|
|
||||||
#define PARAM_APP_KEY @"au" // Localytics Application ID
|
|
||||||
#define PARAM_DEVICE_UUID_HASHED @"udid" // Hashed version of the UUID
|
|
||||||
#define PARAM_DEVICE_ADID @"adid" // Advertising Identifier
|
|
||||||
#define PARAM_INSTALL_ID @"iu" // Install ID
|
|
||||||
#define PARAM_JAILBROKEN @"j" // Jailbroken (boolean)
|
|
||||||
#define PARAM_LIBRARY_VERSION @"lv" // Client Version
|
|
||||||
#define PARAM_APP_VERSION @"av" // Application Version
|
|
||||||
#define PARAM_DEVICE_PLATFORM @"dp" // Device Platform
|
|
||||||
#define PARAM_LOCALE_LANGUAGE @"dll" // Locale Language
|
|
||||||
#define PARAM_LOCALE_COUNTRY @"dlc" // Locale Country
|
|
||||||
#define PARAM_DEVICE_COUNTRY @"dc" // Device Country (iso code)
|
|
||||||
#define PARAM_DEVICE_MODEL @"dmo" // Device Model
|
|
||||||
#define PARAM_DEVICE_OS_VERSION @"dov" // Device OS Version
|
|
||||||
#define PARAM_NETWORK_CARRIER @"nca" // Network Carrier
|
|
||||||
#define PARAM_OPT_VALUE @"out" // Opt Out (boolean)
|
|
||||||
#define PARAM_DEVICE_MEMORY @"dmem" // Device Memory
|
|
||||||
#define PARAM_IDENTIFIERS @"ids" // Identifiers (dictionary)
|
|
||||||
#define PARAM_BIRTH_TIME @"b" // Birth time (Since epoch)
|
|
||||||
#define PARAM_TIMEZONE_OFFSET @"tz" // Device offset from GMT in seconds
|
|
||||||
#define PARAM_FB_ATTRIBUTION @"fbat" // Facebook attribution cookie
|
|
||||||
|
|
||||||
/*****************
|
|
||||||
* Session Start *
|
|
||||||
*****************/
|
|
||||||
|
|
||||||
// PARAM_UUID
|
|
||||||
// PARAM_DATA_TYPE => "s" for Start
|
|
||||||
// PARAM_CLIENT_TIME
|
|
||||||
#define PARAM_SESSION_NUMBER @"nth" // This is the nth session on the device, 1-indexed (int)
|
|
||||||
|
|
||||||
/****************
|
|
||||||
* Session Stop *
|
|
||||||
****************/
|
|
||||||
|
|
||||||
// PARAM_UUID
|
|
||||||
// PARAM_DATA_TYPE => "c" for Close
|
|
||||||
// PARAM_CLIENT_TIME
|
|
||||||
// PARAM_LATITUDE
|
|
||||||
// PARAM_LONGITUDE
|
|
||||||
// PARAM_SESSION_UUID => UUID of session being closed
|
|
||||||
#define PARAM_SESSION_ACTIVE @"cta" // Active time in seconds (time app was active)
|
|
||||||
#define PARAM_SESSION_TOTAL @"ctl" // Total session length
|
|
||||||
#define PARAM_SESSION_SCREENFLOW @"fl" // Screens encountered during this session, in order
|
|
||||||
|
|
||||||
/*********************
|
|
||||||
* Application Event *
|
|
||||||
*********************/
|
|
||||||
|
|
||||||
// PARAM_UUID
|
|
||||||
// PARAM_DATA_TYPE => "e" for Event
|
|
||||||
// PARAM_CLIENT_TIME
|
|
||||||
// PARAM_LATITUDE
|
|
||||||
// PARAM_LONGITUDE
|
|
||||||
// PARAM_SESSION_UUID => UUID of session event occured in
|
|
||||||
// PARAM_ATTRIBUTES => dictionary containing attributes for this event as key-value string pairs
|
|
||||||
#define PARAM_EVENT_NAME @"n" // Event Name, (eg. 'Button Click')
|
|
||||||
#define PARAM_REPORT_ATTRIBUTES @"rattrs" // Attributes used in custom reports
|
|
||||||
#define PARAM_VALUE_NAME @"v" // Added customer value for an event, such as revenue
|
|
||||||
|
|
||||||
/********************
|
|
||||||
* Application flow *
|
|
||||||
********************/
|
|
||||||
|
|
||||||
// PARAM_UUID
|
|
||||||
// PARAM_DATA_TYPE => "f" for Flow
|
|
||||||
// PARAM_CLIENT_TIME
|
|
||||||
#define PARAM_SESSION_START @"ss" // Start time for the current session.
|
|
||||||
#define PARAM_NEW_FLOW_EVENTS @"nw" // Events and screens encountered during this session that have NOT been staged for upload.
|
|
||||||
#define PARAM_OLD_FLOW_EVENTS @"od" // Events and screens encountered during this session that HAVE been staged for upload.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -140,9 +140,6 @@ static NSDictionary *keyQuery(MPUserEntity *user) {
|
|||||||
#ifdef CRASHLYTICS
|
#ifdef CRASHLYTICS
|
||||||
[Crashlytics setObjectValue:user.userID forKey:@"username"];
|
[Crashlytics setObjectValue:user.userID forKey:@"username"];
|
||||||
[Crashlytics setUserName:user.userID];
|
[Crashlytics setUserName:user.userID];
|
||||||
#endif
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] setCustomerName:user.userID];
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,9 +85,6 @@ typedef NS_ENUM(NSUInteger, MPElementType) {
|
|||||||
static void MPCheckpoint(NSString *checkpoint, NSDictionary *attributes) {
|
static void MPCheckpoint(NSString *checkpoint, NSDictionary *attributes) {
|
||||||
|
|
||||||
inf(@"%@: %@", checkpoint, attributes);
|
inf(@"%@: %@", checkpoint, attributes);
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] tagEvent:checkpoint attributes:attributes];
|
|
||||||
#endif
|
|
||||||
#ifdef TESTFLIGHT_SDK_VERSION
|
#ifdef TESTFLIGHT_SDK_VERSION
|
||||||
[TestFlight passCheckpoint:checkpoint];
|
[TestFlight passCheckpoint:checkpoint];
|
||||||
#endif
|
#endif
|
||||||
|
@ -121,7 +121,6 @@
|
|||||||
DACA27381705DF81002C6C22 /* menu-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = DACA24581705DF7D002C6C22 /* menu-icon.png */; };
|
DACA27381705DF81002C6C22 /* menu-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = DACA24581705DF7D002C6C22 /* menu-icon.png */; };
|
||||||
DACA29671705DF81002C6C22 /* SourceCodePro-ExtraLight.otf in Resources */ = {isa = PBXBuildFile; fileRef = DACA268E1705DF81002C6C22 /* SourceCodePro-ExtraLight.otf */; };
|
DACA29671705DF81002C6C22 /* SourceCodePro-ExtraLight.otf in Resources */ = {isa = PBXBuildFile; fileRef = DACA268E1705DF81002C6C22 /* SourceCodePro-ExtraLight.otf */; };
|
||||||
DACA29681705DF81002C6C22 /* SourceCodePro-Black.otf in Resources */ = {isa = PBXBuildFile; fileRef = DACA268F1705DF81002C6C22 /* SourceCodePro-Black.otf */; };
|
DACA29681705DF81002C6C22 /* SourceCodePro-Black.otf in Resources */ = {isa = PBXBuildFile; fileRef = DACA268F1705DF81002C6C22 /* SourceCodePro-Black.otf */; };
|
||||||
DACA296D1705DF81002C6C22 /* Localytics.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA26961705DF81002C6C22 /* Localytics.plist */; };
|
|
||||||
DACA296F1705DF81002C6C22 /* Crashlytics.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA269A1705DF81002C6C22 /* Crashlytics.plist */; };
|
DACA296F1705DF81002C6C22 /* Crashlytics.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA269A1705DF81002C6C22 /* Crashlytics.plist */; };
|
||||||
DACA29731705E1A8002C6C22 /* ciphers.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA29711705E1A8002C6C22 /* ciphers.plist */; };
|
DACA29731705E1A8002C6C22 /* ciphers.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA29711705E1A8002C6C22 /* ciphers.plist */; };
|
||||||
DACA29741705E1A8002C6C22 /* dictionary.lst in Resources */ = {isa = PBXBuildFile; fileRef = DACA29721705E1A8002C6C22 /* dictionary.lst */; };
|
DACA29741705E1A8002C6C22 /* dictionary.lst in Resources */ = {isa = PBXBuildFile; fileRef = DACA29721705E1A8002C6C22 /* dictionary.lst */; };
|
||||||
@ -452,7 +451,6 @@
|
|||||||
DACA24581705DF7D002C6C22 /* menu-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-icon.png"; sourceTree = "<group>"; };
|
DACA24581705DF7D002C6C22 /* menu-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu-icon.png"; sourceTree = "<group>"; };
|
||||||
DACA268E1705DF81002C6C22 /* SourceCodePro-ExtraLight.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceCodePro-ExtraLight.otf"; sourceTree = "<group>"; };
|
DACA268E1705DF81002C6C22 /* SourceCodePro-ExtraLight.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceCodePro-ExtraLight.otf"; sourceTree = "<group>"; };
|
||||||
DACA268F1705DF81002C6C22 /* SourceCodePro-Black.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceCodePro-Black.otf"; sourceTree = "<group>"; };
|
DACA268F1705DF81002C6C22 /* SourceCodePro-Black.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceCodePro-Black.otf"; sourceTree = "<group>"; };
|
||||||
DACA26961705DF81002C6C22 /* Localytics.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Localytics.plist; sourceTree = "<group>"; };
|
|
||||||
DACA269A1705DF81002C6C22 /* Crashlytics.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Crashlytics.plist; sourceTree = "<group>"; };
|
DACA269A1705DF81002C6C22 /* Crashlytics.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Crashlytics.plist; sourceTree = "<group>"; };
|
||||||
DACA29711705E1A8002C6C22 /* ciphers.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ciphers.plist; sourceTree = "<group>"; };
|
DACA29711705E1A8002C6C22 /* ciphers.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ciphers.plist; sourceTree = "<group>"; };
|
||||||
DACA29721705E1A8002C6C22 /* dictionary.lst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dictionary.lst; sourceTree = "<group>"; };
|
DACA29721705E1A8002C6C22 /* dictionary.lst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dictionary.lst; sourceTree = "<group>"; };
|
||||||
@ -844,7 +842,6 @@
|
|||||||
DACA29701705E1A8002C6C22 /* Data */,
|
DACA29701705E1A8002C6C22 /* Data */,
|
||||||
DACA23B51705DF7D002C6C22 /* Media */,
|
DACA23B51705DF7D002C6C22 /* Media */,
|
||||||
DACA26991705DF81002C6C22 /* Crashlytics */,
|
DACA26991705DF81002C6C22 /* Crashlytics */,
|
||||||
DACA26951705DF81002C6C22 /* Localytics */,
|
|
||||||
);
|
);
|
||||||
name = Resources;
|
name = Resources;
|
||||||
path = ../../Resources;
|
path = ../../Resources;
|
||||||
@ -932,14 +929,6 @@
|
|||||||
path = Fonts;
|
path = Fonts;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
DACA26951705DF81002C6C22 /* Localytics */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
DACA26961705DF81002C6C22 /* Localytics.plist */,
|
|
||||||
);
|
|
||||||
path = Localytics;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
DACA26991705DF81002C6C22 /* Crashlytics */ = {
|
DACA26991705DF81002C6C22 /* Crashlytics */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -1534,7 +1523,6 @@
|
|||||||
DACA27381705DF81002C6C22 /* menu-icon.png in Resources */,
|
DACA27381705DF81002C6C22 /* menu-icon.png in Resources */,
|
||||||
DACA29671705DF81002C6C22 /* SourceCodePro-ExtraLight.otf in Resources */,
|
DACA29671705DF81002C6C22 /* SourceCodePro-ExtraLight.otf in Resources */,
|
||||||
DACA29681705DF81002C6C22 /* SourceCodePro-Black.otf in Resources */,
|
DACA29681705DF81002C6C22 /* SourceCodePro-Black.otf in Resources */,
|
||||||
DACA296D1705DF81002C6C22 /* Localytics.plist in Resources */,
|
|
||||||
DACA296F1705DF81002C6C22 /* Crashlytics.plist in Resources */,
|
DACA296F1705DF81002C6C22 /* Crashlytics.plist in Resources */,
|
||||||
DACA29731705E1A8002C6C22 /* ciphers.plist in Resources */,
|
DACA29731705E1A8002C6C22 /* ciphers.plist in Resources */,
|
||||||
DACA29741705E1A8002C6C22 /* dictionary.lst in Resources */,
|
DACA29741705E1A8002C6C22 /* dictionary.lst in Resources */,
|
||||||
|
@ -72,10 +72,6 @@
|
|||||||
|
|
||||||
- (void)viewDidAppear:(BOOL)animated {
|
- (void)viewDidAppear:(BOOL)animated {
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] tagScreen:@"Apps"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[self.pageViewController setViewControllers:@[ (self.pageVCs)[0] ] direction:UIPageViewControllerNavigationDirectionForward
|
[self.pageViewController setViewControllers:@[ (self.pageVCs)[0] ] direction:UIPageViewControllerNavigationDirectionForward
|
||||||
animated:YES completion:nil];
|
animated:YES completion:nil];
|
||||||
|
|
||||||
|
@ -99,15 +99,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)viewDidAppear:(BOOL)animated {
|
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] tagScreen:@"Guide"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[super viewDidAppear:animated];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)viewWillDisappear:(BOOL)animated {
|
- (void)viewWillDisappear:(BOOL)animated {
|
||||||
|
|
||||||
inf(@"Guide will disappear.");
|
inf(@"Guide will disappear.");
|
||||||
|
@ -163,10 +163,6 @@
|
|||||||
} );
|
} );
|
||||||
}];
|
}];
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] tagScreen:@"Main"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[super viewDidAppear:animated];
|
[super viewDidAppear:animated];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@
|
|||||||
|
|
||||||
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
|
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
|
||||||
if (cell == self.signOutCell) {
|
if (cell == self.signOutCell) {
|
||||||
MPPasswordsViewController *passwordsVC = [self dismissPopup];
|
[self dismissPopup];
|
||||||
[[MPiOSAppDelegate get] signOutAnimated:YES];
|
[[MPiOSAppDelegate get] signOutAnimated:YES];
|
||||||
}
|
}
|
||||||
if (cell == self.feedbackCell)
|
if (cell == self.feedbackCell)
|
||||||
|
@ -78,21 +78,6 @@
|
|||||||
[super viewWillAppear:animated];
|
[super viewWillAppear:animated];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)viewDidAppear:(BOOL)animated {
|
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] tagScreen:@"Preferences"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[super viewDidAppear:animated];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)viewWillDisappear:(BOOL)animated {
|
|
||||||
|
|
||||||
inf(@"Preferences will disappear");
|
|
||||||
[super viewWillDisappear:animated];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)canBecomeFirstResponder {
|
- (BOOL)canBecomeFirstResponder {
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
|
@ -24,10 +24,6 @@
|
|||||||
|
|
||||||
- (void)viewDidAppear:(BOOL)animated {
|
- (void)viewDidAppear:(BOOL)animated {
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] tagScreen:@"Setup"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[super viewDidAppear:animated];
|
[super viewDidAppear:animated];
|
||||||
|
|
||||||
if (self.cloudSwitch && [[MPiOSConfig get].iCloudDecided boolValue])
|
if (self.cloudSwitch && [[MPiOSConfig get].iCloudDecided boolValue])
|
||||||
|
@ -43,10 +43,6 @@
|
|||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] tagScreen:@"Type Selection"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[super viewDidAppear:animated];
|
[super viewDidAppear:animated];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,10 +256,6 @@
|
|||||||
[self.marqueeTipTimer invalidate];
|
[self.marqueeTipTimer invalidate];
|
||||||
self.marqueeTipTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(marqueeTip) userInfo:nil repeats:YES];
|
self.marqueeTipTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(marqueeTip) userInfo:nil repeats:YES];
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] tagScreen:@"Unlock"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[super viewDidAppear:animated];
|
[super viewDidAppear:animated];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,27 +87,6 @@
|
|||||||
CLSLog( @"Crashlytics (%@) initialized for: %@ v%@.", //
|
CLSLog( @"Crashlytics (%@) initialized for: %@ v%@.", //
|
||||||
[Crashlytics sharedInstance].version, [PearlInfoPlist get].CFBundleName, [PearlInfoPlist get].CFBundleVersion );
|
[Crashlytics sharedInstance].version, [PearlInfoPlist get].CFBundleName, [PearlInfoPlist get].CFBundleVersion );
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
NSString *localyticsKey = [self localyticsKey];
|
|
||||||
if ([localyticsKey length]) {
|
|
||||||
inf(@"Initializing Localytics");
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] LocalyticsSession:localyticsKey];
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] open];
|
|
||||||
[LocalyticsSession sharedLocalyticsSession].enableHTTPS = YES;
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] setCustomerId:[PearlKeyChain deviceIdentifier]];
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] setCustomerName:@"Anonymous"];
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] upload];
|
|
||||||
[[PearlLogger get] registerListener:^BOOL(PearlLogMessage *message) {
|
|
||||||
if (message.level >= PearlLogLevelWarn)
|
|
||||||
MPCheckpoint( @"Problem", @{
|
|
||||||
@"level" : @(PearlLogLevelStr( message.level )),
|
|
||||||
@"message" : NilToNSNull(message.message)
|
|
||||||
} );
|
|
||||||
|
|
||||||
return YES;
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@catch (id exception) {
|
@catch (id exception) {
|
||||||
@ -301,47 +280,12 @@
|
|||||||
[super applicationDidReceiveMemoryWarning:application];
|
[super applicationDidReceiveMemoryWarning:application];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)applicationDidEnterBackground:(UIApplication *)application {
|
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] close];
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] upload];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[super applicationDidEnterBackground:application];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)applicationWillEnterForeground:(UIApplication *)application {
|
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] resume];
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] upload];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[super applicationWillEnterForeground:application];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)applicationWillTerminate:(UIApplication *)application {
|
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] close];
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] upload];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[super applicationWillTerminate:application];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)applicationWillResignActive:(UIApplication *)application {
|
- (void)applicationWillResignActive:(UIApplication *)application {
|
||||||
|
|
||||||
inf( @"Will deactivate" );
|
inf( @"Will deactivate" );
|
||||||
if (![[MPiOSConfig get].rememberLogin boolValue])
|
if (![[MPiOSConfig get].rememberLogin boolValue])
|
||||||
[self signOutAnimated:NO];
|
[self signOutAnimated:NO];
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] close];
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] upload];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[super applicationWillResignActive:application];
|
[super applicationWillResignActive:application];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,11 +294,6 @@
|
|||||||
inf( @"Re-activated" );
|
inf( @"Re-activated" );
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPCheckConfigNotification object:application];
|
[[NSNotificationCenter defaultCenter] postNotificationName:MPCheckConfigNotification object:application];
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] resume];
|
|
||||||
[[LocalyticsSession sharedLocalyticsSession] upload];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[super applicationDidBecomeActive:application];
|
[super applicationDidBecomeActive:application];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -797,29 +736,4 @@
|
|||||||
return crashlyticsAPIKey;
|
return crashlyticsAPIKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Localytics
|
|
||||||
|
|
||||||
- (NSDictionary *)localyticsInfo {
|
|
||||||
|
|
||||||
static NSDictionary *localyticsInfo = nil;
|
|
||||||
if (localyticsInfo == nil)
|
|
||||||
localyticsInfo = [[NSDictionary alloc] initWithContentsOfURL:
|
|
||||||
[[NSBundle mainBundle] URLForResource:@"Localytics" withExtension:@"plist"]];
|
|
||||||
|
|
||||||
return localyticsInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)localyticsKey {
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
NSString *localyticsKey = NSNullToNil( [[self localyticsInfo] valueForKeyPath:@"Key.development"] );
|
|
||||||
#else
|
|
||||||
NSString *localyticsKey = NSNullToNil([[self localyticsInfo] valueForKeyPath:@"Key.distribution"]);
|
|
||||||
#endif
|
|
||||||
if (![localyticsKey length])
|
|
||||||
wrn( @"Localytics key not set. Demographics won't be collected." );
|
|
||||||
|
|
||||||
return localyticsKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -482,9 +482,7 @@ Your passwords will be AES-encrypted with your master password.</string>
|
|||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
<string key="text">119-20:51:52 MPiOSAppDelegate.m:36 | INFO : Initializing TestFlight
|
<string key="text">119-20:51:52 MPiOSAppDelegate.m:36 | INFO : Initializing TestFlight
|
||||||
119-20:51:52 MPiOSAppDelegate.m:70 | INFO : Initializing Google+
|
|
||||||
119-20:51:52 MPiOSAppDelegate.m:80 | INFO : Initializing Crashlytics
|
119-20:51:52 MPiOSAppDelegate.m:80 | INFO : Initializing Crashlytics
|
||||||
119-20:51:52 MPiOSAppDelegate.m:109 | INFO : Initializing Localytics
|
|
||||||
119-20:51:53 PearlAppDelegate.m:71 | INFO : Master Password (MasterPassword) 1.4 (1.4.0) (GIT: 1.4-0-g8a4eecd-dirty)
|
119-20:51:53 PearlAppDelegate.m:71 | INFO : Master Password (MasterPassword) 1.4 (1.4.0) (GIT: 1.4-0-g8a4eecd-dirty)
|
||||||
119-20:51:53 MPiOSAppDelegate.m:257 | INFO : Started up with device identifier: A8C51CDA-6F60-4F0C-BFC9-68A08F2F2DD7
|
119-20:51:53 MPiOSAppDelegate.m:257 | INFO : Started up with device identifier: A8C51CDA-6F60-4F0C-BFC9-68A08F2F2DD7
|
||||||
119-20:51:59 MPAppDelegate_Store.m:278 | DEBUG : [StoreManager] (Re)loading store...
|
119-20:51:59 MPAppDelegate_Store.m:278 | DEBUG : [StoreManager] (Re)loading store...
|
||||||
|
@ -24,10 +24,6 @@
|
|||||||
#import "TestFlight.h"
|
#import "TestFlight.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LOCALYTICS
|
|
||||||
#import "LocalyticsSession.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#import "MPTypes.h"
|
#import "MPTypes.h"
|
||||||
#import "MPiOSConfig.h"
|
#import "MPiOSConfig.h"
|
||||||
|
|
||||||
|
@ -282,7 +282,6 @@
|
|||||||
DACA22BE1705DE7D002C6C22 /* UbiquityStoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DACA22BA1705DE7D002C6C22 /* UbiquityStoreManager.h */; };
|
DACA22BE1705DE7D002C6C22 /* UbiquityStoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DACA22BA1705DE7D002C6C22 /* UbiquityStoreManager.h */; };
|
||||||
DACA22C61705DE9D002C6C22 /* libTestFlight.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DACA22C31705DE9D002C6C22 /* libTestFlight.a */; };
|
DACA22C61705DE9D002C6C22 /* libTestFlight.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DACA22C31705DE9D002C6C22 /* libTestFlight.a */; };
|
||||||
DACA296C1705DF81002C6C22 /* TestFlight.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA26941705DF81002C6C22 /* TestFlight.plist */; };
|
DACA296C1705DF81002C6C22 /* TestFlight.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA26941705DF81002C6C22 /* TestFlight.plist */; };
|
||||||
DACA296D1705DF81002C6C22 /* Localytics.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA26961705DF81002C6C22 /* Localytics.plist */; };
|
|
||||||
DACA296F1705DF81002C6C22 /* Crashlytics.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA269A1705DF81002C6C22 /* Crashlytics.plist */; };
|
DACA296F1705DF81002C6C22 /* Crashlytics.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA269A1705DF81002C6C22 /* Crashlytics.plist */; };
|
||||||
DACA29731705E1A8002C6C22 /* ciphers.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA29711705E1A8002C6C22 /* ciphers.plist */; };
|
DACA29731705E1A8002C6C22 /* ciphers.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA29711705E1A8002C6C22 /* ciphers.plist */; };
|
||||||
DACA29741705E1A8002C6C22 /* dictionary.lst in Resources */ = {isa = PBXBuildFile; fileRef = DACA29721705E1A8002C6C22 /* dictionary.lst */; };
|
DACA29741705E1A8002C6C22 /* dictionary.lst in Resources */ = {isa = PBXBuildFile; fileRef = DACA29721705E1A8002C6C22 /* dictionary.lst */; };
|
||||||
@ -292,8 +291,6 @@
|
|||||||
DACA29BD1705E2DE002C6C22 /* UIColor+HSV.h in Headers */ = {isa = PBXBuildFile; fileRef = DACA29B61705E2DE002C6C22 /* UIColor+HSV.h */; };
|
DACA29BD1705E2DE002C6C22 /* UIColor+HSV.h in Headers */ = {isa = PBXBuildFile; fileRef = DACA29B61705E2DE002C6C22 /* UIColor+HSV.h */; };
|
||||||
DACA29BE1705E2DE002C6C22 /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = DACA29BA1705E2DE002C6C22 /* UIColor+Expanded.m */; };
|
DACA29BE1705E2DE002C6C22 /* UIColor+Expanded.m in Sources */ = {isa = PBXBuildFile; fileRef = DACA29BA1705E2DE002C6C22 /* UIColor+Expanded.m */; };
|
||||||
DACA29BF1705E2DE002C6C22 /* UIColor+HSV.m in Sources */ = {isa = PBXBuildFile; fileRef = DACA29BB1705E2DE002C6C22 /* UIColor+HSV.m */; };
|
DACA29BF1705E2DE002C6C22 /* UIColor+HSV.m in Sources */ = {isa = PBXBuildFile; fileRef = DACA29BB1705E2DE002C6C22 /* UIColor+HSV.m */; };
|
||||||
DAD3127215528CD200A3F9ED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
|
||||||
DAD312BF1552A1BD00A3F9ED /* libLocalytics.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD3127115528CD200A3F9ED /* libLocalytics.a */; };
|
|
||||||
DAD312C21552A22700A3F9ED /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD312C01552A20800A3F9ED /* libsqlite3.dylib */; };
|
DAD312C21552A22700A3F9ED /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD312C01552A20800A3F9ED /* libsqlite3.dylib */; };
|
||||||
DADEF4121810D2940052CA3E /* love-lyndir.button.green.png in Resources */ = {isa = PBXBuildFile; fileRef = DADEF4061810D2940052CA3E /* love-lyndir.button.green.png */; };
|
DADEF4121810D2940052CA3E /* love-lyndir.button.green.png in Resources */ = {isa = PBXBuildFile; fileRef = DADEF4061810D2940052CA3E /* love-lyndir.button.green.png */; };
|
||||||
DADEF4131810D2940052CA3E /* love-lyndir.button.green@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DADEF4071810D2940052CA3E /* love-lyndir.button.green@2x.png */; };
|
DADEF4131810D2940052CA3E /* love-lyndir.button.green@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DADEF4071810D2940052CA3E /* love-lyndir.button.green@2x.png */; };
|
||||||
@ -418,14 +415,6 @@
|
|||||||
DAFC568F172C57EC00CB5CC5 /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC5680172C57EC00CB5CC5 /* IASKSwitch.m */; };
|
DAFC568F172C57EC00CB5CC5 /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC5680172C57EC00CB5CC5 /* IASKSwitch.m */; };
|
||||||
DAFC5690172C57EC00CB5CC5 /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC5682172C57EC00CB5CC5 /* IASKTextField.m */; };
|
DAFC5690172C57EC00CB5CC5 /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC5682172C57EC00CB5CC5 /* IASKTextField.m */; };
|
||||||
DAFC5691172C582A00CB5CC5 /* libInAppSettingsKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAFC5655172C573B00CB5CC5 /* libInAppSettingsKit.a */; };
|
DAFC5691172C582A00CB5CC5 /* libInAppSettingsKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAFC5655172C573B00CB5CC5 /* libInAppSettingsKit.a */; };
|
||||||
DAFC56A2172C6E8500CB5CC5 /* LocalyticsDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFC569A172C6E8500CB5CC5 /* LocalyticsDatabase.h */; };
|
|
||||||
DAFC56A3172C6E8500CB5CC5 /* LocalyticsDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC569B172C6E8500CB5CC5 /* LocalyticsDatabase.m */; };
|
|
||||||
DAFC56A5172C6E8500CB5CC5 /* LocalyticsSession.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFC569C172C6E8500CB5CC5 /* LocalyticsSession.h */; };
|
|
||||||
DAFC56A6172C6E8500CB5CC5 /* LocalyticsSession.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC569D172C6E8500CB5CC5 /* LocalyticsSession.m */; };
|
|
||||||
DAFC56A8172C6E8500CB5CC5 /* LocalyticsSession+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFC569E172C6E8500CB5CC5 /* LocalyticsSession+Private.h */; };
|
|
||||||
DAFC56A9172C6E8500CB5CC5 /* LocalyticsUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFC569F172C6E8500CB5CC5 /* LocalyticsUploader.h */; };
|
|
||||||
DAFC56AA172C6E8500CB5CC5 /* LocalyticsUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56A0172C6E8500CB5CC5 /* LocalyticsUploader.m */; };
|
|
||||||
DAFC56AC172C6E8500CB5CC5 /* WebserviceConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFC56A1172C6E8500CB5CC5 /* WebserviceConstants.h */; };
|
|
||||||
DAFE4A1315039824003ABA7C /* NSObject+PearlExport.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFE45D815039823003ABA7C /* NSObject+PearlExport.h */; };
|
DAFE4A1315039824003ABA7C /* NSObject+PearlExport.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFE45D815039823003ABA7C /* NSObject+PearlExport.h */; };
|
||||||
DAFE4A1415039824003ABA7C /* NSObject+PearlExport.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFE45D915039823003ABA7C /* NSObject+PearlExport.m */; };
|
DAFE4A1415039824003ABA7C /* NSObject+PearlExport.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFE45D915039823003ABA7C /* NSObject+PearlExport.m */; };
|
||||||
DAFE4A1515039824003ABA7C /* NSString+PearlNSArrayFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFE45DA15039823003ABA7C /* NSString+PearlNSArrayFormat.h */; };
|
DAFE4A1515039824003ABA7C /* NSString+PearlNSArrayFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFE45DA15039823003ABA7C /* NSString+PearlNSArrayFormat.h */; };
|
||||||
@ -1370,7 +1359,6 @@
|
|||||||
DACA22C11705DE9D002C6C22 /* TestFlight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestFlight.h; sourceTree = "<group>"; };
|
DACA22C11705DE9D002C6C22 /* TestFlight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestFlight.h; sourceTree = "<group>"; };
|
||||||
DACA22C31705DE9D002C6C22 /* libTestFlight.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libTestFlight.a; sourceTree = "<group>"; };
|
DACA22C31705DE9D002C6C22 /* libTestFlight.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libTestFlight.a; sourceTree = "<group>"; };
|
||||||
DACA26941705DF81002C6C22 /* TestFlight.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = TestFlight.plist; sourceTree = "<group>"; };
|
DACA26941705DF81002C6C22 /* TestFlight.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = TestFlight.plist; sourceTree = "<group>"; };
|
||||||
DACA26961705DF81002C6C22 /* Localytics.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Localytics.plist; sourceTree = "<group>"; };
|
|
||||||
DACA269A1705DF81002C6C22 /* Crashlytics.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Crashlytics.plist; sourceTree = "<group>"; };
|
DACA269A1705DF81002C6C22 /* Crashlytics.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Crashlytics.plist; sourceTree = "<group>"; };
|
||||||
DACA29711705E1A8002C6C22 /* ciphers.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ciphers.plist; sourceTree = "<group>"; };
|
DACA29711705E1A8002C6C22 /* ciphers.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ciphers.plist; sourceTree = "<group>"; };
|
||||||
DACA29721705E1A8002C6C22 /* dictionary.lst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dictionary.lst; sourceTree = "<group>"; };
|
DACA29721705E1A8002C6C22 /* dictionary.lst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dictionary.lst; sourceTree = "<group>"; };
|
||||||
@ -1380,7 +1368,6 @@
|
|||||||
DACA29B61705E2DE002C6C22 /* UIColor+HSV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+HSV.h"; sourceTree = "<group>"; };
|
DACA29B61705E2DE002C6C22 /* UIColor+HSV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+HSV.h"; sourceTree = "<group>"; };
|
||||||
DACA29BA1705E2DE002C6C22 /* UIColor+Expanded.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Expanded.m"; sourceTree = "<group>"; };
|
DACA29BA1705E2DE002C6C22 /* UIColor+Expanded.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Expanded.m"; sourceTree = "<group>"; };
|
||||||
DACA29BB1705E2DE002C6C22 /* UIColor+HSV.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+HSV.m"; sourceTree = "<group>"; };
|
DACA29BB1705E2DE002C6C22 /* UIColor+HSV.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+HSV.m"; sourceTree = "<group>"; };
|
||||||
DAD3127115528CD200A3F9ED /* libLocalytics.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libLocalytics.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
DAD312C01552A20800A3F9ED /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
|
DAD312C01552A20800A3F9ED /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
|
||||||
DADBB55918DB0CFC00D099FE /* keyboard-dark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard-dark@2x.png"; sourceTree = "<group>"; };
|
DADBB55918DB0CFC00D099FE /* keyboard-dark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard-dark@2x.png"; sourceTree = "<group>"; };
|
||||||
DADEF4061810D2940052CA3E /* love-lyndir.button.green.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "love-lyndir.button.green.png"; sourceTree = "<group>"; };
|
DADEF4061810D2940052CA3E /* love-lyndir.button.green.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "love-lyndir.button.green.png"; sourceTree = "<group>"; };
|
||||||
@ -1519,14 +1506,6 @@
|
|||||||
DAFC5680172C57EC00CB5CC5 /* IASKSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSwitch.m; sourceTree = "<group>"; };
|
DAFC5680172C57EC00CB5CC5 /* IASKSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSwitch.m; sourceTree = "<group>"; };
|
||||||
DAFC5681172C57EC00CB5CC5 /* IASKTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKTextField.h; sourceTree = "<group>"; };
|
DAFC5681172C57EC00CB5CC5 /* IASKTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKTextField.h; sourceTree = "<group>"; };
|
||||||
DAFC5682172C57EC00CB5CC5 /* IASKTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKTextField.m; sourceTree = "<group>"; };
|
DAFC5682172C57EC00CB5CC5 /* IASKTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKTextField.m; sourceTree = "<group>"; };
|
||||||
DAFC569A172C6E8500CB5CC5 /* LocalyticsDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalyticsDatabase.h; sourceTree = "<group>"; };
|
|
||||||
DAFC569B172C6E8500CB5CC5 /* LocalyticsDatabase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalyticsDatabase.m; sourceTree = "<group>"; };
|
|
||||||
DAFC569C172C6E8500CB5CC5 /* LocalyticsSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalyticsSession.h; sourceTree = "<group>"; };
|
|
||||||
DAFC569D172C6E8500CB5CC5 /* LocalyticsSession.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalyticsSession.m; sourceTree = "<group>"; };
|
|
||||||
DAFC569E172C6E8500CB5CC5 /* LocalyticsSession+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "LocalyticsSession+Private.h"; sourceTree = "<group>"; };
|
|
||||||
DAFC569F172C6E8500CB5CC5 /* LocalyticsUploader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalyticsUploader.h; sourceTree = "<group>"; };
|
|
||||||
DAFC56A0172C6E8500CB5CC5 /* LocalyticsUploader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalyticsUploader.m; sourceTree = "<group>"; };
|
|
||||||
DAFC56A1172C6E8500CB5CC5 /* WebserviceConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebserviceConstants.h; sourceTree = "<group>"; };
|
|
||||||
DAFE45D815039823003ABA7C /* NSObject+PearlExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+PearlExport.h"; sourceTree = "<group>"; };
|
DAFE45D815039823003ABA7C /* NSObject+PearlExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+PearlExport.h"; sourceTree = "<group>"; };
|
||||||
DAFE45D915039823003ABA7C /* NSObject+PearlExport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+PearlExport.m"; sourceTree = "<group>"; };
|
DAFE45D915039823003ABA7C /* NSObject+PearlExport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+PearlExport.m"; sourceTree = "<group>"; };
|
||||||
DAFE45DA15039823003ABA7C /* NSString+PearlNSArrayFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+PearlNSArrayFormat.h"; sourceTree = "<group>"; };
|
DAFE45DA15039823003ABA7C /* NSString+PearlNSArrayFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+PearlNSArrayFormat.h"; sourceTree = "<group>"; };
|
||||||
@ -1633,7 +1612,6 @@
|
|||||||
DA6701B816406A4100B61001 /* Accounts.framework in Frameworks */,
|
DA6701B816406A4100B61001 /* Accounts.framework in Frameworks */,
|
||||||
DA44260A1557D9E40052177D /* libUbiquityStoreManager.a in Frameworks */,
|
DA44260A1557D9E40052177D /* libUbiquityStoreManager.a in Frameworks */,
|
||||||
DAD312C21552A22700A3F9ED /* libsqlite3.dylib in Frameworks */,
|
DAD312C21552A22700A3F9ED /* libsqlite3.dylib in Frameworks */,
|
||||||
DAD312BF1552A1BD00A3F9ED /* libLocalytics.a in Frameworks */,
|
|
||||||
DABB981615100B4000B05417 /* SystemConfiguration.framework in Frameworks */,
|
DABB981615100B4000B05417 /* SystemConfiguration.framework in Frameworks */,
|
||||||
DA672D3014F9413D004A189C /* libPearl.a in Frameworks */,
|
DA672D3014F9413D004A189C /* libPearl.a in Frameworks */,
|
||||||
DA672D2F14F92C6B004A189C /* libz.dylib in Frameworks */,
|
DA672D2F14F92C6B004A189C /* libz.dylib in Frameworks */,
|
||||||
@ -1678,14 +1656,6 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
DAD3126E15528CD200A3F9ED /* Frameworks */ = {
|
|
||||||
isa = PBXFrameworksBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
DAD3127215528CD200A3F9ED /* Foundation.framework in Frameworks */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
DADEF41F1810D5530052CA3E /* Frameworks */ = {
|
DADEF41F1810D5530052CA3E /* Frameworks */ = {
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@ -1726,7 +1696,6 @@
|
|||||||
DAC77CAD148291A600BCF976 /* libPearl.a */,
|
DAC77CAD148291A600BCF976 /* libPearl.a */,
|
||||||
DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */,
|
DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */,
|
||||||
DAC6326C148680650075AEA5 /* libjrswizzle.a */,
|
DAC6326C148680650075AEA5 /* libjrswizzle.a */,
|
||||||
DAD3127115528CD200A3F9ED /* libLocalytics.a */,
|
|
||||||
DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */,
|
DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */,
|
||||||
DAFC5655172C573B00CB5CC5 /* libInAppSettingsKit.a */,
|
DAFC5655172C573B00CB5CC5 /* libInAppSettingsKit.a */,
|
||||||
DADEF4221810D5530052CA3E /* libLoveLyndir.a */,
|
DADEF4221810D5530052CA3E /* libLoveLyndir.a */,
|
||||||
@ -2654,7 +2623,6 @@
|
|||||||
DAA1411A1922FED80032B392 /* Mac */,
|
DAA1411A1922FED80032B392 /* Mac */,
|
||||||
DADEF3E91810D1980052CA3E /* LoveLyndir */,
|
DADEF3E91810D1980052CA3E /* LoveLyndir */,
|
||||||
DAFC5662172C57EC00CB5CC5 /* InAppSettingsKit */,
|
DAFC5662172C57EC00CB5CC5 /* InAppSettingsKit */,
|
||||||
DACA22C71705DEB0002C6C22 /* Localytics */,
|
|
||||||
DAC77CAF148291A600BCF976 /* Pearl */,
|
DAC77CAF148291A600BCF976 /* Pearl */,
|
||||||
DACA22BF1705DE9D002C6C22 /* TestFlight */,
|
DACA22BF1705DE9D002C6C22 /* TestFlight */,
|
||||||
DACA22B61705DE7D002C6C22 /* UbiquityStoreManager */,
|
DACA22B61705DE7D002C6C22 /* UbiquityStoreManager */,
|
||||||
@ -2686,28 +2654,12 @@
|
|||||||
path = TestFlight;
|
path = TestFlight;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
DACA22C71705DEB0002C6C22 /* Localytics */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
DAFC569A172C6E8500CB5CC5 /* LocalyticsDatabase.h */,
|
|
||||||
DAFC569B172C6E8500CB5CC5 /* LocalyticsDatabase.m */,
|
|
||||||
DAFC569C172C6E8500CB5CC5 /* LocalyticsSession.h */,
|
|
||||||
DAFC569D172C6E8500CB5CC5 /* LocalyticsSession.m */,
|
|
||||||
DAFC569E172C6E8500CB5CC5 /* LocalyticsSession+Private.h */,
|
|
||||||
DAFC569F172C6E8500CB5CC5 /* LocalyticsUploader.h */,
|
|
||||||
DAFC56A0172C6E8500CB5CC5 /* LocalyticsUploader.m */,
|
|
||||||
DAFC56A1172C6E8500CB5CC5 /* WebserviceConstants.h */,
|
|
||||||
);
|
|
||||||
path = Localytics;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
DACA23B41705DF7D002C6C22 /* Resources */ = {
|
DACA23B41705DF7D002C6C22 /* Resources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
DACA29701705E1A8002C6C22 /* Data */,
|
DACA29701705E1A8002C6C22 /* Data */,
|
||||||
DABD360D1711E29400CF925C /* Media */,
|
DABD360D1711E29400CF925C /* Media */,
|
||||||
DACA26991705DF81002C6C22 /* Crashlytics */,
|
DACA26991705DF81002C6C22 /* Crashlytics */,
|
||||||
DACA26951705DF81002C6C22 /* Localytics */,
|
|
||||||
DACA26931705DF81002C6C22 /* TestFlight */,
|
DACA26931705DF81002C6C22 /* TestFlight */,
|
||||||
DAE1EF2417E942DE00BC0086 /* Localizable.strings */,
|
DAE1EF2417E942DE00BC0086 /* Localizable.strings */,
|
||||||
);
|
);
|
||||||
@ -2723,14 +2675,6 @@
|
|||||||
path = TestFlight;
|
path = TestFlight;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
DACA26951705DF81002C6C22 /* Localytics */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
DACA26961705DF81002C6C22 /* Localytics.plist */,
|
|
||||||
);
|
|
||||||
path = Localytics;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
DACA26991705DF81002C6C22 /* Crashlytics */ = {
|
DACA26991705DF81002C6C22 /* Crashlytics */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -3323,18 +3267,6 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
DAD3126F15528CD200A3F9ED /* Headers */ = {
|
|
||||||
isa = PBXHeadersBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
DAFC56A2172C6E8500CB5CC5 /* LocalyticsDatabase.h in Headers */,
|
|
||||||
DAFC56A5172C6E8500CB5CC5 /* LocalyticsSession.h in Headers */,
|
|
||||||
DAFC56A8172C6E8500CB5CC5 /* LocalyticsSession+Private.h in Headers */,
|
|
||||||
DAFC56A9172C6E8500CB5CC5 /* LocalyticsUploader.h in Headers */,
|
|
||||||
DAFC56AC172C6E8500CB5CC5 /* WebserviceConstants.h in Headers */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXHeadersBuildPhase section */
|
/* End PBXHeadersBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
@ -3426,23 +3358,6 @@
|
|||||||
productReference = DAC77CAD148291A600BCF976 /* libPearl.a */;
|
productReference = DAC77CAD148291A600BCF976 /* libPearl.a */;
|
||||||
productType = "com.apple.product-type.library.static";
|
productType = "com.apple.product-type.library.static";
|
||||||
};
|
};
|
||||||
DAD3127015528CD200A3F9ED /* Localytics */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = DAD3127915528CD200A3F9ED /* Build configuration list for PBXNativeTarget "Localytics" */;
|
|
||||||
buildPhases = (
|
|
||||||
DAD3126D15528CD200A3F9ED /* Sources */,
|
|
||||||
DAD3126E15528CD200A3F9ED /* Frameworks */,
|
|
||||||
DAD3126F15528CD200A3F9ED /* Headers */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
);
|
|
||||||
name = Localytics;
|
|
||||||
productName = Localytics;
|
|
||||||
productReference = DAD3127115528CD200A3F9ED /* libLocalytics.a */;
|
|
||||||
productType = "com.apple.product-type.library.static";
|
|
||||||
};
|
|
||||||
DADEF4211810D5530052CA3E /* LoveLyndir */ = {
|
DADEF4211810D5530052CA3E /* LoveLyndir */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = DADEF4441810D5540052CA3E /* Build configuration list for PBXNativeTarget "LoveLyndir" */;
|
buildConfigurationList = DADEF4441810D5540052CA3E /* Build configuration list for PBXNativeTarget "LoveLyndir" */;
|
||||||
@ -3600,7 +3515,6 @@
|
|||||||
DAC77CAC148291A600BCF976 /* Pearl */,
|
DAC77CAC148291A600BCF976 /* Pearl */,
|
||||||
DAC6325C1486805C0075AEA5 /* uicolor-utilities */,
|
DAC6325C1486805C0075AEA5 /* uicolor-utilities */,
|
||||||
DAC6326B148680650075AEA5 /* jrswizzle */,
|
DAC6326B148680650075AEA5 /* jrswizzle */,
|
||||||
DAD3127015528CD200A3F9ED /* Localytics */,
|
|
||||||
DA4425CA1557BED40052177D /* UbiquityStoreManager */,
|
DA4425CA1557BED40052177D /* UbiquityStoreManager */,
|
||||||
DAFC5654172C573B00CB5CC5 /* InAppSettingsKit */,
|
DAFC5654172C573B00CB5CC5 /* InAppSettingsKit */,
|
||||||
DADEF4211810D5530052CA3E /* LoveLyndir */,
|
DADEF4211810D5530052CA3E /* LoveLyndir */,
|
||||||
@ -3615,7 +3529,6 @@
|
|||||||
files = (
|
files = (
|
||||||
DAFE4A5A1503982E003ABA7C /* Pearl.strings in Resources */,
|
DAFE4A5A1503982E003ABA7C /* Pearl.strings in Resources */,
|
||||||
DACA296C1705DF81002C6C22 /* TestFlight.plist in Resources */,
|
DACA296C1705DF81002C6C22 /* TestFlight.plist in Resources */,
|
||||||
DACA296D1705DF81002C6C22 /* Localytics.plist in Resources */,
|
|
||||||
DACA296F1705DF81002C6C22 /* Crashlytics.plist in Resources */,
|
DACA296F1705DF81002C6C22 /* Crashlytics.plist in Resources */,
|
||||||
DADEF4171810D2940052CA3E /* love-lyndir.button.red@2x.png in Resources */,
|
DADEF4171810D2940052CA3E /* love-lyndir.button.red@2x.png in Resources */,
|
||||||
DACA29731705E1A8002C6C22 /* ciphers.plist in Resources */,
|
DACA29731705E1A8002C6C22 /* ciphers.plist in Resources */,
|
||||||
@ -3805,7 +3718,7 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = "/bin/bash -e";
|
shellPath = "/bin/bash -e";
|
||||||
shellScript = "PATH+=:/usr/libexec\n\naddPlistWithKey() {\n local key=$1 type=$2 value=$3 plist=${4:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Delete :'$key'\" \"$plist\" 2>/dev/null || true\n PlistBuddy -c \"Add :'$key' '$type' '$value'\" \"$plist\"\n}\nsetPlistWithKey() {\n local key=$1 value=$2 plist=${3:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Set :'$key' '$value'\" \"$plist\"\n}\ngetPlistWithKey() {\n local key=$1 plist=${2:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Print :'$key'\" \"$plist\"\n}\nsetSettingWithTitle() {\n local i title=$1 value=$2 plist=${3:-\"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Settings.bundle/Root.plist\"}\n \n for (( i=0; 1; ++i )); do\n PlistBuddy -c \"Print :PreferenceSpecifiers:$i\" \"$plist\" &>/dev/null || break\n echo \"Checking preference specifier $i\"\n \n [[ $(PlistBuddy -c \"Print :PreferenceSpecifiers:$i:Title\" \"$plist\" 2>/dev/null) = $title ]] || continue\n \n echo \"Correct title, setting value.\"\n PlistBuddy -c \"Set :PreferenceSpecifiers:$i:DefaultValue $value\" \"$plist\"\n break\n done\n}\n\ndescription=$(git describe --always --dirty --long)\nversion=${description%-g*}\nIFS=- read major minor <<< \"$version\"\nprintf -v version '%s.%02d' \"$major\" \"$minor\"\nprintf -v commit '%09d' \"$((16#${description##*-g}))\"\n\naddPlistWithKey GITDescription string \"$description\"\nsetPlistWithKey CFBundleVersion \"${version//.}$commit\" # No separator between version and commit because I had already submitted a CFBundleVersion with a really high major. Cry.\nsetPlistWithKey CFBundleShortVersionString \"$version\"\n\nsetSettingWithTitle \"Build\" \"$commit\"\nsetSettingWithTitle \"Version\" \"$version\"\nsetSettingWithTitle \"Copyright\" \"$(getPlistWithKey NSHumanReadableCopyright)\"\n\nif [[ $DEPLOYMENT_LOCATION = YES ]]; then\n # This build is a release. Do some release checks.\n passed=1\n [[ $description != *-dirty ]] || \\\n { passed=0; echo >&2 \"ERROR: Cannot release a dirty version, first commit any changes.\"; }\n [[ $(PlistBuddy -c \"Print :'API Key'\" \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Crashlytics.plist\") ]] || \\\n { passed=0; echo >&2 \"ERROR: Cannot release: Crashlytics API key is missing.\"; }\n [[ $(PlistBuddy -c \"Print :'ClientID'\" \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Google+.plist\") ]] || \\\n { passed=0; echo >&2 \"ERROR: Cannot release: Google+ ClientID is missing.\"; }\n [[ $(PlistBuddy -c \"Print :'Key.distribution'\" \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Localytics.plist\") ]] || \\\n { passed=0; echo >&2 \"ERROR: Cannot release: Localytics distribution key is missing.\"; }\n (( passed )) || \\\n { echo >&2 \"Failed to pass release checks. Fix the above errors and re-try. Aborting.\"; exit 1; }\nfi";
|
shellScript = "PATH+=:/usr/libexec\n\naddPlistWithKey() {\n local key=$1 type=$2 value=$3 plist=${4:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Delete :'$key'\" \"$plist\" 2>/dev/null || true\n PlistBuddy -c \"Add :'$key' '$type' '$value'\" \"$plist\"\n}\nsetPlistWithKey() {\n local key=$1 value=$2 plist=${3:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Set :'$key' '$value'\" \"$plist\"\n}\ngetPlistWithKey() {\n local key=$1 plist=${2:-\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"}\n \n PlistBuddy -c \"Print :'$key'\" \"$plist\"\n}\nsetSettingWithTitle() {\n local i title=$1 value=$2 plist=${3:-\"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Settings.bundle/Root.plist\"}\n \n for (( i=0; 1; ++i )); do\n PlistBuddy -c \"Print :PreferenceSpecifiers:$i\" \"$plist\" &>/dev/null || break\n echo \"Checking preference specifier $i\"\n \n [[ $(PlistBuddy -c \"Print :PreferenceSpecifiers:$i:Title\" \"$plist\" 2>/dev/null) = $title ]] || continue\n \n echo \"Correct title, setting value.\"\n PlistBuddy -c \"Set :PreferenceSpecifiers:$i:DefaultValue $value\" \"$plist\"\n break\n done\n}\n\ndescription=$(git describe --always --dirty --long)\nversion=${description%-g*}\nIFS=- read major minor <<< \"$version\"\nprintf -v version '%s.%02d' \"$major\" \"$minor\"\nprintf -v commit '%09d' \"$((16#${description##*-g}))\"\n\naddPlistWithKey GITDescription string \"$description\"\nsetPlistWithKey CFBundleVersion \"${version//.}$commit\" # No separator between version and commit because I had already submitted a CFBundleVersion with a really high major. Cry.\nsetPlistWithKey CFBundleShortVersionString \"$version\"\n\nsetSettingWithTitle \"Build\" \"$commit\"\nsetSettingWithTitle \"Version\" \"$version\"\nsetSettingWithTitle \"Copyright\" \"$(getPlistWithKey NSHumanReadableCopyright)\"\n\nif [[ $DEPLOYMENT_LOCATION = YES ]]; then\n # This build is a release. Do some release checks.\n passed=1\n [[ $description != *-dirty ]] || \\\n { passed=0; echo >&2 \"ERROR: Cannot release a dirty version, first commit any changes.\"; }\n [[ $(PlistBuddy -c \"Print :'API Key'\" \"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Crashlytics.plist\") ]] || \\\n { passed=0; echo >&2 \"ERROR: Cannot release: Crashlytics API key is missing.\"; }\n (( passed )) || \\\n { echo >&2 \"Failed to pass release checks. Fix the above errors and re-try. Aborting.\"; exit 1; }\nfi";
|
||||||
};
|
};
|
||||||
DA67460818DE7B2C00DFE240 /* Run Script: Moarfonts */ = {
|
DA67460818DE7B2C00DFE240 /* Run Script: Moarfonts */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
@ -3991,16 +3904,6 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
DAD3126D15528CD200A3F9ED /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
DAFC56A3172C6E8500CB5CC5 /* LocalyticsDatabase.m in Sources */,
|
|
||||||
DAFC56A6172C6E8500CB5CC5 /* LocalyticsSession.m in Sources */,
|
|
||||||
DAFC56AA172C6E8500CB5CC5 /* LocalyticsUploader.m in Sources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
DADEF41E1810D5530052CA3E /* Sources */ = {
|
DADEF41E1810D5530052CA3E /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@ -4092,7 +3995,6 @@
|
|||||||
CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES;
|
CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES;
|
||||||
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
|
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
@ -4178,7 +4080,6 @@
|
|||||||
CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES;
|
CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES;
|
||||||
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
|
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_STATIC_ANALYZER_MODE = deep;
|
CLANG_STATIC_ANALYZER_MODE = deep;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
@ -4216,7 +4117,6 @@
|
|||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
"NS_BLOCK_ASSERTIONS=1",
|
"NS_BLOCK_ASSERTIONS=1",
|
||||||
"TESTFLIGHT=1",
|
"TESTFLIGHT=1",
|
||||||
"LOCALYTICS=1",
|
|
||||||
"CRASHLYTICS=1",
|
"CRASHLYTICS=1",
|
||||||
);
|
);
|
||||||
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
|
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
|
||||||
@ -4321,7 +4221,6 @@
|
|||||||
CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES;
|
CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES;
|
||||||
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
|
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_STATIC_ANALYZER_MODE = deep;
|
CLANG_STATIC_ANALYZER_MODE = deep;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
@ -4359,7 +4258,6 @@
|
|||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
"NS_BLOCK_ASSERTIONS=1",
|
"NS_BLOCK_ASSERTIONS=1",
|
||||||
"CRASHLYTICS=1",
|
"CRASHLYTICS=1",
|
||||||
"LOCALYTICS=1",
|
|
||||||
);
|
);
|
||||||
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
|
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
|
||||||
GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES;
|
GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES;
|
||||||
@ -4437,11 +4335,6 @@
|
|||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
DSTROOT = /tmp/Pearl.dst;
|
DSTROOT = /tmp/Pearl.dst;
|
||||||
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
|
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"\\\"$(SRCROOT)/../../../External/Pearl/Pearl-Crypto\\\"",
|
|
||||||
"/Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Pearl/Pearl-Crypto/lib",
|
|
||||||
);
|
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
@ -4526,11 +4419,6 @@
|
|||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
DSTROOT = /tmp/Pearl.dst;
|
DSTROOT = /tmp/Pearl.dst;
|
||||||
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
|
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"\\\"$(SRCROOT)/../../../External/Pearl/Pearl-Crypto\\\"",
|
|
||||||
"/Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Pearl/Pearl-Crypto/lib",
|
|
||||||
);
|
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
@ -4543,50 +4431,12 @@
|
|||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
DSTROOT = /tmp/Pearl.dst;
|
DSTROOT = /tmp/Pearl.dst;
|
||||||
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
|
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"\\\"$(SRCROOT)/../../../External/Pearl/Pearl-Crypto\\\"",
|
|
||||||
"/Users/lhunath/Documents/workspace/lyndir/MasterPassword/External/Pearl/Pearl-Crypto/lib",
|
|
||||||
);
|
|
||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = "AdHoc-iOS";
|
name = "AdHoc-iOS";
|
||||||
};
|
};
|
||||||
DAD3127A15528CD200A3F9ED /* Debug-iOS */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
|
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"\"$(SRCROOT)/../../../External/Localytics\"",
|
|
||||||
);
|
|
||||||
};
|
|
||||||
name = "Debug-iOS";
|
|
||||||
};
|
|
||||||
DAD3127B15528CD200A3F9ED /* AdHoc-iOS */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
|
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"\"$(SRCROOT)/../../../External/Localytics\"",
|
|
||||||
);
|
|
||||||
};
|
|
||||||
name = "AdHoc-iOS";
|
|
||||||
};
|
|
||||||
DAD3127C15528CD200A3F9ED /* AppStore-iOS */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
|
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"\"$(SRCROOT)/../../../External/Localytics\"",
|
|
||||||
);
|
|
||||||
};
|
|
||||||
name = "AppStore-iOS";
|
|
||||||
};
|
|
||||||
DADEF43E1810D5540052CA3E /* Debug-iOS */ = {
|
DADEF43E1810D5540052CA3E /* Debug-iOS */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
@ -4612,10 +4462,6 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
|
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"\"$(SRCROOT)/../../../External/Localytics\"",
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
name = "Debug-iOS";
|
name = "Debug-iOS";
|
||||||
};
|
};
|
||||||
@ -4623,10 +4469,6 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
|
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"\"$(SRCROOT)/../../../External/Localytics\"",
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
name = "AdHoc-iOS";
|
name = "AdHoc-iOS";
|
||||||
};
|
};
|
||||||
@ -4634,10 +4476,6 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
|
GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"\"$(SRCROOT)/../../../External/Localytics\"",
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
name = "AppStore-iOS";
|
name = "AppStore-iOS";
|
||||||
};
|
};
|
||||||
@ -4704,16 +4542,6 @@
|
|||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = "AdHoc-iOS";
|
defaultConfigurationName = "AdHoc-iOS";
|
||||||
};
|
};
|
||||||
DAD3127915528CD200A3F9ED /* Build configuration list for PBXNativeTarget "Localytics" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
DAD3127A15528CD200A3F9ED /* Debug-iOS */,
|
|
||||||
DAD3127B15528CD200A3F9ED /* AdHoc-iOS */,
|
|
||||||
DAD3127C15528CD200A3F9ED /* AppStore-iOS */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = "AdHoc-iOS";
|
|
||||||
};
|
|
||||||
DADEF4441810D5540052CA3E /* Build configuration list for PBXNativeTarget "LoveLyndir" */ = {
|
DADEF4441810D5540052CA3E /* Build configuration list for PBXNativeTarget "LoveLyndir" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
|
@ -1879,9 +1879,7 @@
|
|||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
<inset key="scrollIndicatorInsets" minX="0.0" minY="64" maxX="0.0" maxY="93"/>
|
<inset key="scrollIndicatorInsets" minX="0.0" minY="64" maxX="0.0" maxY="93"/>
|
||||||
<string key="text">119-20:51:52 MPiOSAppDelegate.m:36 | INFO : Initializing TestFlight
|
<string key="text">119-20:51:52 MPiOSAppDelegate.m:36 | INFO : Initializing TestFlight
|
||||||
119-20:51:52 MPiOSAppDelegate.m:70 | INFO : Initializing Google+
|
|
||||||
119-20:51:52 MPiOSAppDelegate.m:80 | INFO : Initializing Crashlytics
|
119-20:51:52 MPiOSAppDelegate.m:80 | INFO : Initializing Crashlytics
|
||||||
119-20:51:52 MPiOSAppDelegate.m:109 | INFO : Initializing Localytics
|
|
||||||
119-20:51:53 PearlAppDelegate.m:71 | INFO : Master Password (MasterPassword) 1.4 (1.4.0) (GIT: 1.4-0-g8a4eecd-dirty)
|
119-20:51:53 PearlAppDelegate.m:71 | INFO : Master Password (MasterPassword) 1.4 (1.4.0) (GIT: 1.4-0-g8a4eecd-dirty)
|
||||||
119-20:51:53 MPiOSAppDelegate.m:257 | INFO : Started up with device identifier: A8C51CDA-6F60-4F0C-BFC9-68A08F2F2DD7
|
119-20:51:53 MPiOSAppDelegate.m:257 | INFO : Started up with device identifier: A8C51CDA-6F60-4F0C-BFC9-68A08F2F2DD7
|
||||||
119-20:51:59 MPAppDelegate_Store.m:278 | DEBUG : [StoreManager] (Re)loading store...
|
119-20:51:59 MPAppDelegate_Store.m:278 | DEBUG : [StoreManager] (Re)loading store...
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
<?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>ClientID</key>
|
|
||||||
<string></string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@ -1,10 +0,0 @@
|
|||||||
<?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>Key.development</key>
|
|
||||||
<string></string>
|
|
||||||
<key>Key.distribution</key>
|
|
||||||
<string></string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
Loading…
Reference in New Issue
Block a user