forked from organicmaps/organicmaps
[ios] Removed Localytics
This commit is contained in:
parent
390e220b58
commit
f0c1d14084
9 changed files with 0 additions and 598 deletions
|
@ -35,16 +35,6 @@
|
|||
97508420199501F100A7457D /* ImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 9750841E199501F100A7457D /* ImageDownloader.m */; };
|
||||
97508423199522D300A7457D /* SettingsAndMoreVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 97508422199522D300A7457D /* SettingsAndMoreVC.mm */; };
|
||||
97508424199522D300A7457D /* SettingsAndMoreVC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 97508422199522D300A7457D /* SettingsAndMoreVC.mm */; };
|
||||
9767700F19B5BE1600402693 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9767700E19B5BE1600402693 /* libz.dylib */; };
|
||||
9767701119B5BE2200402693 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9767701019B5BE2200402693 /* libsqlite3.dylib */; };
|
||||
9767701219B5BE3800402693 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9767700E19B5BE1600402693 /* libz.dylib */; };
|
||||
9767701319B5BE3E00402693 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9767701019B5BE2200402693 /* libsqlite3.dylib */; };
|
||||
9767702019B718D700402693 /* iOSa_2.60.0.version in Resources */ = {isa = PBXBuildFile; fileRef = 9767701B19B718D700402693 /* iOSa_2.60.0.version */; };
|
||||
9767702119B718D700402693 /* iOSa_2.60.0.version in Resources */ = {isa = PBXBuildFile; fileRef = 9767701B19B718D700402693 /* iOSa_2.60.0.version */; };
|
||||
9767702219B718D700402693 /* libLocalyticsAMP.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9767701C19B718D700402693 /* libLocalyticsAMP.a */; };
|
||||
9767702319B718D700402693 /* libLocalyticsAMP.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9767701C19B718D700402693 /* libLocalyticsAMP.a */; };
|
||||
9767702419B718D800402693 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 9767701D19B718D700402693 /* LICENSE */; };
|
||||
9767702519B718D800402693 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 9767701D19B718D700402693 /* LICENSE */; };
|
||||
9769D6EF1912BF3000CA6158 /* ContainerView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9769D6EE1912BF3000CA6158 /* ContainerView.mm */; };
|
||||
9769D6F01912BF3000CA6158 /* ContainerView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9769D6EE1912BF3000CA6158 /* ContainerView.mm */; };
|
||||
976D86EC19C8697700C920EF /* ProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 976D86EB19C8697700C920EF /* ProgressView.m */; };
|
||||
|
@ -1366,13 +1356,6 @@
|
|||
9750841E199501F100A7457D /* ImageDownloader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageDownloader.m; sourceTree = "<group>"; };
|
||||
97508421199522D300A7457D /* SettingsAndMoreVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsAndMoreVC.h; sourceTree = "<group>"; };
|
||||
97508422199522D300A7457D /* SettingsAndMoreVC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SettingsAndMoreVC.mm; sourceTree = "<group>"; };
|
||||
9767700E19B5BE1600402693 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
|
||||
9767701019B5BE2200402693 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
|
||||
9767701B19B718D700402693 /* iOSa_2.60.0.version */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = iOSa_2.60.0.version; sourceTree = "<group>"; };
|
||||
9767701C19B718D700402693 /* libLocalyticsAMP.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libLocalyticsAMP.a; sourceTree = "<group>"; };
|
||||
9767701D19B718D700402693 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
|
||||
9767701E19B718D700402693 /* LocalyticsAmpSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalyticsAmpSession.h; sourceTree = "<group>"; };
|
||||
9767701F19B718D700402693 /* LocalyticsSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalyticsSession.h; sourceTree = "<group>"; };
|
||||
9769D6ED1912BF3000CA6158 /* ContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContainerView.h; sourceTree = "<group>"; };
|
||||
9769D6EE1912BF3000CA6158 /* ContainerView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ContainerView.mm; sourceTree = "<group>"; };
|
||||
976D86EA19C8697700C920EF /* ProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressView.h; path = Classes/ProgressView.h; sourceTree = "<group>"; };
|
||||
|
@ -2137,8 +2120,6 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9767701119B5BE2200402693 /* libsqlite3.dylib in Frameworks */,
|
||||
9767700F19B5BE1600402693 /* libz.dylib in Frameworks */,
|
||||
97D807BE18A93C8800D416E0 /* iAd.framework in Frameworks */,
|
||||
97719D491843B6F700BDD815 /* Security.framework in Frameworks */,
|
||||
97719D451843B6DC00BDD815 /* MessageUI.framework in Frameworks */,
|
||||
|
@ -2156,7 +2137,6 @@
|
|||
974386D91934CBAC00FD5659 /* FacebookSDK.framework in Frameworks */,
|
||||
97DD585C18A8EB130079837E /* libFlurry_5.4.0.a in Frameworks */,
|
||||
FA87151B12B1518F00592DAF /* SystemConfiguration.framework in Frameworks */,
|
||||
9767702219B718D700402693 /* libLocalyticsAMP.a in Frameworks */,
|
||||
97DD585818A8EB060079837E /* MobileAppTracker.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
@ -2165,8 +2145,6 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9767701319B5BE3E00402693 /* libsqlite3.dylib in Frameworks */,
|
||||
9767701219B5BE3800402693 /* libz.dylib in Frameworks */,
|
||||
97EDDCE518A299C000AEFB7A /* Twitter.framework in Frameworks */,
|
||||
972CDCC61887F1B7006641CA /* CFNetwork.framework in Frameworks */,
|
||||
97C98656186C734000AF7E9E /* AVFoundation.framework in Frameworks */,
|
||||
|
@ -2189,7 +2167,6 @@
|
|||
FAFB08FE151215EE0041901D /* CoreGraphics.framework in Frameworks */,
|
||||
FAFB08FF151215EE0041901D /* OpenGLES.framework in Frameworks */,
|
||||
FAFB0900151215EE0041901D /* QuartzCore.framework in Frameworks */,
|
||||
9767702319B718D700402693 /* libLocalyticsAMP.a in Frameworks */,
|
||||
FAFB0901151215EE0041901D /* CoreLocation.framework in Frameworks */,
|
||||
97DD585918A8EB060079837E /* MobileAppTracker.framework in Frameworks */,
|
||||
FAFB0909151215EE0041901D /* SystemConfiguration.framework in Frameworks */,
|
||||
|
@ -2290,8 +2267,6 @@
|
|||
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9767701019B5BE2200402693 /* libsqlite3.dylib */,
|
||||
9767700E19B5BE1600402693 /* libz.dylib */,
|
||||
FAA0F162196AC14100E01C3F /* librouting.a */,
|
||||
974386D81934CBAC00FD5659 /* FacebookSDK.framework */,
|
||||
97EDDCE418A299C000AEFB7A /* Twitter.framework */,
|
||||
|
@ -2343,18 +2318,6 @@
|
|||
name = Categories;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9767701A19B718D700402693 /* Localitycs */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9767701B19B718D700402693 /* iOSa_2.60.0.version */,
|
||||
9767701C19B718D700402693 /* libLocalyticsAMP.a */,
|
||||
9767701D19B718D700402693 /* LICENSE */,
|
||||
9767701E19B718D700402693 /* LocalyticsAmpSession.h */,
|
||||
9767701F19B718D700402693 /* LocalyticsSession.h */,
|
||||
);
|
||||
path = Localitycs;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
976D86EE19C8777500C920EF /* Downloader */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -2511,7 +2474,6 @@
|
|||
CB252D6816FF82C8001E41E9 /* Statistics */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9767701A19B718D700402693 /* Localitycs */,
|
||||
97C98521186AE3CF00AF7E9E /* AppInfo.h */,
|
||||
97C98520186AE3CF00AF7E9E /* AppInfo.mm */,
|
||||
97C9851D186AE3C500AF7E9E /* Reachability.h */,
|
||||
|
@ -3530,7 +3492,6 @@
|
|||
FAF800EC1417D7E50024E8C1 /* ph.png in Resources */,
|
||||
FAF800ED1417D7E50024E8C1 /* pk.png in Resources */,
|
||||
FAF800EE1417D7E50024E8C1 /* pl.png in Resources */,
|
||||
9767702019B718D700402693 /* iOSa_2.60.0.version in Resources */,
|
||||
FAF800EF1417D7E50024E8C1 /* pm.png in Resources */,
|
||||
FAF800F01417D7E50024E8C1 /* pn.png in Resources */,
|
||||
FAF800F11417D7E50024E8C1 /* pr.png in Resources */,
|
||||
|
@ -3611,7 +3572,6 @@
|
|||
FAF804351417E3510024E8C1 /* ae@2x.png in Resources */,
|
||||
FAF804361417E3510024E8C1 /* af@2x.png in Resources */,
|
||||
FAF804371417E3510024E8C1 /* ag@2x.png in Resources */,
|
||||
9767702419B718D800402693 /* LICENSE in Resources */,
|
||||
FAF804381417E3510024E8C1 /* ai@2x.png in Resources */,
|
||||
FAF804391417E3510024E8C1 /* al@2x.png in Resources */,
|
||||
FAF8043A1417E3510024E8C1 /* am@2x.png in Resources */,
|
||||
|
@ -3958,7 +3918,6 @@
|
|||
FAFB06ED151215EE0041901D /* bj.png in Resources */,
|
||||
FAFB06EE151215EE0041901D /* bl.png in Resources */,
|
||||
FAFB06EF151215EE0041901D /* bm.png in Resources */,
|
||||
9767702519B718D800402693 /* LICENSE in Resources */,
|
||||
FAFB06F0151215EE0041901D /* bn.png in Resources */,
|
||||
FAFB06F1151215EE0041901D /* bo.png in Resources */,
|
||||
FAFB06F2151215EE0041901D /* br.png in Resources */,
|
||||
|
@ -3986,7 +3945,6 @@
|
|||
FAFB0708151215EE0041901D /* cw.png in Resources */,
|
||||
FAFB0709151215EE0041901D /* cx.png in Resources */,
|
||||
FAFB070A151215EE0041901D /* cy.png in Resources */,
|
||||
9767702119B718D700402693 /* iOSa_2.60.0.version in Resources */,
|
||||
FAFB070B151215EE0041901D /* cz.png in Resources */,
|
||||
FAFB070C151215EE0041901D /* de.png in Resources */,
|
||||
FAFB070D151215EE0041901D /* dj.png in Resources */,
|
||||
|
@ -4709,7 +4667,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -4869,7 +4826,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -4960,7 +4916,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5055,7 +5010,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5145,7 +5099,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5236,7 +5189,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5331,7 +5283,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5426,7 +5377,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5520,7 +5470,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5614,7 +5563,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5707,7 +5655,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5732,7 +5679,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5757,7 +5703,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5782,7 +5727,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5807,7 +5751,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5832,7 +5775,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5857,7 +5799,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5882,7 +5823,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5907,7 +5847,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5932,7 +5871,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5957,7 +5895,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
@ -5982,7 +5919,6 @@
|
|||
"$(inherited)",
|
||||
"${SRCROOT}/Statistics",
|
||||
"${SRCROOT}",
|
||||
"$(PROJECT_DIR)/Statistics/Localitycs",
|
||||
);
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
|
|
|
@ -53,8 +53,6 @@
|
|||
<string>14130</string>
|
||||
<key>MobileAppTrackerConversionKey</key>
|
||||
<string>***REMOVED***</string>
|
||||
<key>LocalyticsKey</key>
|
||||
<string>6cb45a0efb680ff69c98159-6a322566-3282-11e4-a0d7-005cf8cbabd8</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainWindow</string>
|
||||
<key>NSMainNibFile~ipad</key>
|
||||
|
|
|
@ -86,8 +86,6 @@
|
|||
<string>14130</string>
|
||||
<key>MobileAppTrackerConversionKey</key>
|
||||
<string>***REMOVED***</string>
|
||||
<key>LocalyticsKey</key>
|
||||
<string>3af7c0176890d2106a45aae-100ae848-327e-11e4-a0d9-005cf8cbabd8</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainWindow</string>
|
||||
<key>NSMainNibFile~ipad</key>
|
||||
|
|
|
@ -1,21 +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.
|
|
@ -1,71 +0,0 @@
|
|||
//
|
||||
// LocalyticsAmpSession.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"
|
||||
|
||||
@protocol LocalyticsAmpSessionDelegate;
|
||||
|
||||
@interface LocalyticsAmpSession : LocalyticsSession
|
||||
|
||||
/*!
|
||||
@property displayButtonOnLeft
|
||||
@abstract Determines whether the dismiss button is shown on the left corner instead of the right
|
||||
Default value is true.
|
||||
*/
|
||||
@property (assign) BOOL displayButtonOnLeft;
|
||||
|
||||
/*!
|
||||
@property testModeEnabled
|
||||
@abstract Determines whether SDK is in test mode
|
||||
*/
|
||||
@property (assign) BOOL testModeEnabled;
|
||||
|
||||
/*!
|
||||
@property delegate
|
||||
@abstract Reference to an object that conforms to the LocalyticsSessionDelegate protocol.
|
||||
*/
|
||||
@property (nonatomic, assign) id<LocalyticsAmpSessionDelegate>ampDelegate;
|
||||
|
||||
/*!
|
||||
@property dismissButtonImage
|
||||
@abstract Image to use for the dismiss button (instead of the default).
|
||||
*/
|
||||
@property (nonatomic, readonly) UIImage* dismissButtonImage;
|
||||
|
||||
#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]
|
||||
This is a AMP specific function designed to return the localytics session object as an AMP
|
||||
session object, rather than as its super class, the base LocalyticsSession
|
||||
*/
|
||||
+ (LocalyticsAmpSession *)shared;
|
||||
- (BOOL)handleURL:(NSURL *)url;
|
||||
- (void)ampTrigger:(NSString *)event;
|
||||
- (void)ampTrigger:(NSString *)event attributes:(NSDictionary *)attributes;
|
||||
- (void)ampTrigger:(NSString *)event attributes:(NSDictionary *)attributes reportAttributes:(NSDictionary *)reportAttributes;
|
||||
|
||||
- (void)setDismissButtonImageWithName:(NSString *)imageName;
|
||||
- (void)setDismissButtonImageWithImage:(UIImage *)image;
|
||||
@end
|
||||
|
||||
@protocol LocalyticsAmpSessionDelegate <NSObject>
|
||||
@optional
|
||||
|
||||
- (void)localyticsWillDisplayAMPMessage;
|
||||
- (void)localyticsDidDisplayAMPMessage;
|
||||
- (void)localyticsWillHideAMPMessage;
|
||||
- (void)localyticsDidHideAMPMessage;
|
||||
|
||||
@end
|
|
@ -1,408 +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.60.0"
|
||||
#define MARKETING_PLATFORM
|
||||
|
||||
/*!
|
||||
@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
|
||||
*/
|
||||
|
||||
// Forward declaration
|
||||
@protocol LocalyticsSessionDelegate;
|
||||
|
||||
@interface LocalyticsSession : NSObject
|
||||
|
||||
//************************************************************************************************//
|
||||
#pragma mark - Singleton Accessors
|
||||
/*!
|
||||
@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;
|
||||
//************************************************************************************************//
|
||||
|
||||
|
||||
//************************************************************************************************//
|
||||
#pragma mark - Simple Integration Methods
|
||||
/*!
|
||||
@method integrateLocalytics
|
||||
@abstract Initializes the Localytics Object and auto-integrates basic open/close
|
||||
session and upload code.
|
||||
@param applicationKey The key unique for each application generated at www.localytics.com
|
||||
@param launchOptions Launch options
|
||||
*/
|
||||
- (void)integrateLocalytics:(NSString *)appKey launchOptions:(NSDictionary *)launchOptions;
|
||||
|
||||
/*!
|
||||
@method integratePushNotifications
|
||||
@abstract Lets the Localytics SDK handle registering for and handling push notifications
|
||||
@param remoteNotificationType The types of notifications for which to register
|
||||
*/
|
||||
- (void)integratePushNotifications:(UIRemoteNotificationType)remoteNotificationType;
|
||||
//************************************************************************************************//
|
||||
|
||||
|
||||
//************************************************************************************************//
|
||||
#pragma mark - Developer Options
|
||||
/*!
|
||||
@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 advertisingIdentifierEnabled
|
||||
@abstract (Optional) Determines whether or not IDFA is collected and sent to Localytics.
|
||||
The default is YES.
|
||||
*/
|
||||
@property (nonatomic, assign) BOOL advertisingIdentifierEnabled;
|
||||
|
||||
/*!
|
||||
@property sessionTimeoutInterval
|
||||
@abstrac (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;
|
||||
|
||||
/*!
|
||||
@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;
|
||||
//************************************************************************************************//
|
||||
|
||||
|
||||
//************************************************************************************************//
|
||||
#pragma mark - Tag Events Methods
|
||||
/*!
|
||||
@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 rerportAttributes (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;
|
||||
|
||||
- (void)tagEvent:(NSString *)event
|
||||
attributes:(NSDictionary *)attributes;
|
||||
|
||||
- (void)tagEvent:(NSString *)event
|
||||
attributes:(NSDictionary *)attributes
|
||||
customerValueIncrease:(NSNumber *)customerValueIncrease;
|
||||
|
||||
- (void)tagEvent:(NSString *)event
|
||||
attributes:(NSDictionary *)attributes
|
||||
reportAttributes:(NSDictionary *)reportAttributes;
|
||||
|
||||
- (void)tagEvent:(NSString *)event
|
||||
attributes:(NSDictionary *)attributes
|
||||
reportAttributes:(NSDictionary *)reportAttributes
|
||||
customerValueIncrease:(NSNumber *)customerValueIncrease;
|
||||
//************************************************************************************************//
|
||||
|
||||
|
||||
//************************************************************************************************//
|
||||
#pragma mark - Custom Dimensions Methods
|
||||
/*!
|
||||
@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;
|
||||
//************************************************************************************************//
|
||||
|
||||
|
||||
//************************************************************************************************//
|
||||
#pragma mark - Tag Screen Method
|
||||
/*!
|
||||
@method tagScreen
|
||||
@abstract Allows tagging the flow of screens encountered during the session.
|
||||
@param screen The name of the screen
|
||||
*/
|
||||
- (void)tagScreen:(NSString *)screen;
|
||||
//************************************************************************************************//
|
||||
|
||||
|
||||
//************************************************************************************************//
|
||||
#pragma mark - Customer Methods
|
||||
/*!
|
||||
@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;
|
||||
//************************************************************************************************//
|
||||
|
||||
|
||||
//************************************************************************************************//
|
||||
#pragma mark - Set Location Method
|
||||
/*!
|
||||
@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 location
|
||||
information. It is not required that you call this function.
|
||||
@param deviceLocation The user's location.
|
||||
*/
|
||||
- (void)setLocation:(CLLocationCoordinate2D)deviceLocation;
|
||||
//************************************************************************************************//
|
||||
|
||||
//************************************************************************************************//
|
||||
#pragma mark - Profile Methods
|
||||
/*!
|
||||
@method setProfileValue:forAttribute:
|
||||
@abstract Sets the value of a profile attribute.
|
||||
@param value The value to set the profile attribute to. value can be one of the following: NSString,
|
||||
NSNumber(long & int), NSDate, NSArray of Strings, NSArray of NSNumbers(long & int), NSArray of Date,
|
||||
nil. Passing in a 'nil' value will result in that attribute being deleted from the profile
|
||||
@param attribute The attribute is the name of the profile attribute
|
||||
*/
|
||||
- (void)setProfileValue:(NSObject<NSCopying> *)value forAttribute:(NSString *)attribute;
|
||||
//************************************************************************************************//
|
||||
|
||||
//************************************************************************************************//
|
||||
#pragma mark - Advanced Integration Methods
|
||||
/*!
|
||||
@method LocalyticsSession
|
||||
@abstract Initializes the Localytics Object. Not necessary if you choose to use startSession.
|
||||
@param applicationKey The key unique for each application generated at www.localytics.com
|
||||
*/
|
||||
- (void)LocalyticsSession:(NSString *)appKey;
|
||||
|
||||
/*!
|
||||
@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 applicationKey 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 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 setPushToken
|
||||
@abstract Stores the device's APNS token. This will be used in all event and session calls.
|
||||
@param pushToken device token returned by application:didRegisterForRemoteNotificationsWithDeviceToken:
|
||||
*/
|
||||
- (void)setPushToken:(NSData *)pushToken;
|
||||
|
||||
#ifdef MARKETING_PLATFORM
|
||||
/*!
|
||||
@method handleRemoteNotification
|
||||
@abstract Used to record performance data for push notifications
|
||||
@param notificationInfo The dictionary from either didFinishLaunchingWithOptions
|
||||
or didReceiveRemoteNotification should be passed on to this method
|
||||
*/
|
||||
- (void)handleRemoteNotification:(NSDictionary *)notificationInfo;
|
||||
#endif
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
@protocol LocalyticsSessionDelegate <NSObject>
|
||||
@optional
|
||||
|
||||
/*!
|
||||
@method localyticsWillResumeSession
|
||||
@abstract Register for this callback to be notified when Localytics will resume
|
||||
a session. See the on the 'resume' method for additional details.
|
||||
@param willResumeExistingSession This flag will indicate if Localytics restored an existing
|
||||
session or started a new one.
|
||||
*/
|
||||
- (void)localyticsWillResumeSession:(BOOL)willResumeExistingSession;
|
||||
|
||||
/*!
|
||||
@method localyticsDidResumeSession
|
||||
@abstract Register for this callback to be notified when Localytics has resumed
|
||||
a session. 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)localyticsDidResumeSession:(BOOL)didResumeExistingSession;
|
||||
|
||||
/*!
|
||||
@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.
|
||||
@deprecated This method is deprecated. Use 'localyticsDidResumeSession:' instead.
|
||||
*/
|
||||
- (void)localyticsResumedSession:(BOOL)didResumeExistingSession __attribute__((deprecated("This method is deprecated. Use 'localyticsDidResumeSession:' instead.")));
|
||||
|
||||
/*!
|
||||
@method localyticsPrepareUploadBody
|
||||
@abstract Register for this callback if you wish to modify the upload body before
|
||||
being sent to Localytics
|
||||
@param uploadBody The upload body as prepared by Localytics
|
||||
@return The modified upload body
|
||||
*/
|
||||
- (NSString *)localyticsPrepareUploadBody:(NSString *)uploadBody;
|
||||
|
||||
@end
|
Binary file not shown.
|
@ -3,7 +3,6 @@
|
|||
#include "../../../platform/settings.hpp"
|
||||
#import "Flurry.h"
|
||||
#import "AppInfo.h"
|
||||
#import "LocalyticsSession.h"
|
||||
|
||||
@implementation Statistics
|
||||
|
||||
|
@ -14,9 +13,6 @@
|
|||
[Flurry startSession:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"FlurryKey"]];
|
||||
[Flurry setCrashReportingEnabled:YES];
|
||||
[Flurry setSessionReportsOnPauseEnabled:NO];
|
||||
|
||||
[[LocalyticsSession shared] integrateLocalytics:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"LocalyticsKey"] launchOptions:launchOptions];
|
||||
[LocalyticsSession shared].enableHTTPS = YES;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,10 +32,7 @@
|
|||
- (void)logEvent:(NSString *)eventName withParameters:(NSDictionary *)parameters
|
||||
{
|
||||
if (self.enabled)
|
||||
{
|
||||
[Flurry logEvent:eventName withParameters:parameters];
|
||||
[[LocalyticsSession shared] tagEvent:eventName attributes:parameters];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)logEvent:(NSString *)eventName
|
||||
|
@ -70,45 +63,22 @@
|
|||
|
||||
- (void)applicationWillResignActive
|
||||
{
|
||||
[self closeLocalytics];
|
||||
}
|
||||
|
||||
- (void)applicationWillTerminate
|
||||
{
|
||||
[self closeLocalytics];
|
||||
}
|
||||
|
||||
- (void)applicationDidEnterBackground
|
||||
{
|
||||
[self closeLocalytics];
|
||||
}
|
||||
|
||||
- (void)applicationWillEnterForeground
|
||||
{
|
||||
[self resumeLocalytics];
|
||||
}
|
||||
|
||||
- (void)applicationDidBecomeActive
|
||||
{
|
||||
[self resumeLocalytics];
|
||||
}
|
||||
|
||||
- (void)resumeLocalytics
|
||||
{
|
||||
if (self.enabled)
|
||||
{
|
||||
[[LocalyticsSession shared] resume];
|
||||
[[LocalyticsSession shared] upload];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)closeLocalytics
|
||||
{
|
||||
if (self.enabled)
|
||||
{
|
||||
[[LocalyticsSession shared] close];
|
||||
[[LocalyticsSession shared] upload];
|
||||
}
|
||||
}
|
||||
|
||||
- (id)init
|
||||
|
|
Loading…
Add table
Reference in a new issue