These SDKs are deprecated
The MobileAppTracking SDK code is released under the LGPL license. For alternative licensing options, please contact TUNE, Inc.
TUNE iOS, Android, and Windows native SDKs
Home Page: https://developers.tune.com/sdk/quick-starts/
License: GNU General Public License v3.0
These SDKs are deprecated
The MobileAppTracking SDK code is released under the LGPL license. For alternative licensing options, please contact TUNE, Inc.
Please upload mobile app tracker jar file to a common place such as central and jcenter.
Hi,
In you SDK, the function Tune.handleOpen(url, sourceApplication: sourceApplication)
need a URL
and a String!
but with SWIFT 3.2, the sourceApplication
is now optional.
Can we do that to avoid crashes ?
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
// When the app is opened due to a deep link, call the Tune deep link setter
if let s = sourceApplication {
Tune.handleOpen(url, sourceApplication: s)
}
else{
Tune.handleOpen(url, sourceApplication: nil)
}
...
}
Regards,
I am looking at the source and i can't figure out why this is the case? We need to minimize the size of this Framework in our project. Is there any advice you can give?
Hello Team,
You should set "All Platforms" in Project settings ->Build->Platform
tune-marketing-console-sdk v4.1.0
Fatal Exception: java.lang.SecurityException: xxx from uid 10125 not allowed to perform FINE_LOCATION
at android.os.Parcel.readException(Parcel.java:1546)
at android.os.Parcel.readException(Parcel.java:1499)
at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:582)
at android.location.LocationManager.requestLocationUpdates(LocationManager.java:948)
at android.location.LocationManager.requestLocationUpdates(LocationManager.java:496)
at com.tune.location.TuneLocationListener$GetLocationUpdates.run(SourceFile:197)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:139)
at android.app.ActivityThread.main(ActivityThread.java:5298)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:950)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
We have several crashes in this method. Are we "holding it wrong" ?
Thread 7 Crashed:
0 libobjc.A.dylib 0x00000001925fc0a0 objc_retain + 16
1 Real Green 0x000000010077a590 -[TuneTracker notifyDelegateRequestEnqueuedWithRefId:url:postData:] (TuneTracker.m:497)
2 Real Green 0x000000010077b934 -[TuneTracker sendRequestWithEvent:] (TuneTracker.m:645)
3 Real Green 0x000000010077a2d4 -[TuneTracker sendRequestAndCheckIadAttributionForEvent:] (TuneTracker.m:469)
4 Real Green 0x000000010077a20c -[TuneTracker measureEvent:] (TuneTracker.m:458)
5 Real Green 0x0000000100767f94 __21+[Tune measureEvent:]_block_invoke (Tune.m:664)
6 Foundation 0x000000019469bfb0 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 12
7 Foundation 0x00000001945e0aa8 -[NSBlockOperation main] + 92
8 Foundation 0x00000001945d10a4 -[__NSOperationInternal _start:] + 616
9 Foundation 0x000000019469e35c __NSOQSchedule_f + 224
10 libdispatch.dylib 0x0000000192a361bc _dispatch_client_callout + 12
11 libdispatch.dylib 0x0000000192a443dc _dispatch_queue_serial_drain + 924
12 libdispatch.dylib 0x0000000192a399a4 _dispatch_queue_invoke + 648
13 libdispatch.dylib 0x0000000192a4634c _dispatch_root_queue_drain + 568
14 libdispatch.dylib 0x0000000192a460ac _dispatch_worker_thread3 + 120
15 libsystem_pthread.dylib 0x0000000192c3f2a0 _pthread_wqthread + 1284
16 libsystem_pthread.dylib 0x0000000192c3ed8c start_wqthread + 0
The Xcode build process show me this error and I can't build :
duplicate symbol l071 in:
/Users/jbustamante/Desktop/Aborda/aborda/mmc_mistura_iphone/MobileAppTracker.framework/MobileAppTracker(TuneEventQueue.o)
/Users/jbustamante/Desktop/Aborda/aborda/mmc_mistura_iphone/MobileAppTracker.framework/MobileAppTracker(TuneDeferredDplinkr.o)
ld: 1 duplicate symbol for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Thank you!!!
The class name and file name are not the same case, and a build error occurs.
https://github.com/TuneOSS/sdk-release/blob/master/sdk-android/TuneMarketingConsoleSDK/src/main/java/com/tune/smartwhere/TuneSmartWhereConfiguration.java
Hi,
I have followed all the instructions for integrating this library, but I get this after inspecting the api call when requesting if there is any deferred deeplink available.
{"code":400,"message":"cannot determine site_id"}
Could you help me with this, please?
I have Tune 4.8.0 added to my project via CocoaPod 1.0.1. My project treats warnings as errors and has the clang flag -Wdocumentation
enabled. Building my app results in 5 errors in 2 files:
* param enable
should be * param enableDebug
* param variableName
should be * param name
* param variableName
should be * param name
* param variableName
should be * param name
* param variableName
should be * param name
Adding -Wno-documentation
to the build config in CocoaPods post_install hook does not fix the problem. I think this is due to the fact that Tune gets installed as a framework?
Are there any workarounds until the source is fixed?
Fatal Exception: java.lang.SecurityException: app from uid XXX not allowed to perform FINE_LOCATION
at com.tune.location.TuneLocationListener$GetLocationUpdates.run(TuneLocationListener.java:207)
com.tune:tune-marketing-console-sdk:4.3.0
Device is ONE E1003 5.1.1 (Lollipop)
May be a device-specific issue since we only see one instance of this crash.
Looks like Google ran into this too:
https://bugs.chromium.org/p/chromium/issues/detail?id=580733
I'm forced to either remove MAT from my app, and submit my next version to AppStore, or wait an unknown period of time for a new version of the MAT library.
harshal-hasoffers commented 3 days ago and said a BITCODE version would be available in 1-2 days.
You're KILLING ME HERE.
I've had to comment out this Jailbreak check line to compile in iOS 11/Xcode 9:
https://github.com/TuneOSS/sdk-release/blob/master/sdk-ios/Tune/Tune/TuneUtils.m#L185
The int system(const char *) API has been marked __IOS_PROHIBITED
We don't track or collect our user's age in our Product. Our product is only for adults. As a result we have no "sane" value to Set Age with.
The iOS SDK Code as written treats an age of 0 as "underage" as far as I can see from the code.
Is there a way to declare globally that age is irrelevant for our product? Otherwise I'm going to have to hack it with setAge: 1000
.
Thoughts?
Hi,
Your SDK seem to be outdated from Apple native function (app in SWIFT 3.2)
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
// When the app is opened due to a deep link, call the Tune deep link setter
Tune.handleOpen(url, options: options)
return true
}
We have the issue : Cannot convert value of type '[UIApplicationOpenURLOptionsKey : Any]' to expected argument type '[String : Any]!'
Can you update it or give us the documentation for this issue.
Regards,
Tune/Tune/Tune/module.modulemap:1:18:error: redefinition of module 'Tune'
framework module Tune { ... }
This error is preventing us from building the SDK as is
Even If I set setShouldAutoCollectDeviceLocation to false, tune still track the user position, which is unacceptable!
Minimal code to reproduce:
func applicationDidBecomeActive(application: UIApplication) {
Tune.setShouldAutoCollectDeviceLocation(false)
Tune.measureSession()
}
duplicate symbol l070 in:
... /MobileAppTracker.framework/MobileAppTracker(TuneDeferredDplinkr.o)
... /MobileAppTracker/MobileAppTracker.framework/MobileAppTracker(TuneEventQueue.o)
1 duplicate symbol for architecture arm64
This issue still appears in:
MobileAppTracker 3.11.0
Yosemite 10.10.5 (14F27)
Xcode 6.2 (6C131e)
iOS SDK 8.2
Swift iOS project
when building for arm64 (i.e. preparing archive for itunes)
On Simulator build OK.
Any idea how to fix it ?
I can't compile because the framework does not support bitcode. Did I do something wrong?
TuneEvent.o)' was built without full bitcode
V3.14
2. 5 PERFORMANCE: SOFTWARE REQUIREMENTS
Performance - 2.5.1
Your app uses or references the following non-public APIs:
activateApp
The use of non-public APIs is not permitted on the App Store because it can lead to a poor user experience should these APIs change.
grep -Rnis 'activateApp' *
Binary file Pods/Tune/Tune.framework/Tune matches
Please, fix it.
Now that apps with API 24 can be shipped, the libraries included with Tune should be updated accordingly.
The current iOS headers don't specify any nullability qualifiers. This means that clang will treat everything as implicitly unwrapped, which makes this framework a ticking time bomb to use with Swift.
Objective-c is being relegated to a second class citizen, this kind of thing is an absolute must have for a lot of folks out there.
At the top of NSObject+TuneRuntime.m, there are a couple import statements that are incorrect. Particularly the following:
Should be changed to:
This might not kind of issue, but I found that the receiver was not set any custom permission which expose other application to communicate with, is there any way that we can handle this issues?
I heard that Google and tune created a new referrer API to prevent click injection.(here)
I think it is a good solution.
So, which sdk version does support this issue?
In the Windows Phone SDK, instead of using Isolated Storage setting, can't the SDK use separate files(key-value, key being unique file name) to save relevant info?
Stack Trace
0 at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
1 at System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
2 at WriteArrayOfKeyValueOfstringanyTypeToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract )
3 at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)
4 at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
5 at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
6 at System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
7 at System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
8 at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
9 at System.Runtime.Serialization.XmlObjectSerializer.WriteObject(XmlDictionaryWriter writer, Object graph)
10 at System.Runtime.Serialization.XmlObjectSerializer.WriteObject(Stream stream, Object graph)
11 at System.IO.IsolatedStorage.IsolatedStorageSettings.Save()
12 at MobileAppTracking.MobileAppTracker.SaveLocalSetting(String key, Object value)
13 at MobileAppTracking.MobileAppTracker.GetUrlCallback(IAsyncResult result)
14 at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClass1d.b__1b(Object state2)
Why not call conn.disconnect() after using HttpURLConnection?
https://github.com/TuneOSS/sdk-release/blob/master/sdk-android/TuneMarketingConsoleSDK/src/main/java/com/tune/http/TuneUrlRequester.java
We have one app (let it be com.example.app) for both Amazon and Google stores, but to have separate analytics for them on Tune website, we pass different package names in calls to Tune.init (as described here: https://tune.docs.branch.io/sdk/creating-unique-package-names/#code-platform-android): com.example.app for Google store and com.example.appamazon for Amazon. Before SDK version 6.0.0 everything worked fine, but now all analytics from Amazon version of the app are displayed with "app_version" = 0.
After investigating your code, it seems that the problem is in this line: https://github.com/BranchMetrics/sdk-release/blob/master/sdk-android/TuneMarketingConsoleSDK/src/main/java/com/tune/TuneParameters.java#L150
SDK versions prior to 6.0.0 used real package name (Context.getPackageName) to query the system about app's version, but now custom package name is used. In our case, Google store version of the app works fine, because its custom package name is the same as the real package name (com.example.app), but on Amazon the system cannot find a package named com.example.appamazon and thus appVersion is set to 0.
I have Tunes integrated from a very long time, from nowhere I started seeing a new crash in
iOS version : iOS 12.1.2
I am using Tune pod version : pod 'Tune', '4.12.5'
in crashlytics it is captured, log :
TuneUtils.m line 175
+[TuneUtils checkJailBreak]
#0
Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000000
Crashed: com.apple.main-thread
0 libsystem_platform.dylib 0x2359ea010 _platform_strcmp
1 (Missing) 0x105bf29e0 (Missing)
2 (Missing) 0x105b66d64 (Missing)
3 (Missing) 0x105b66c3c (Missing)
4 (Missing) 0x105b6cb58 (Missing)
5 PhonePe 0x10130e650 +[TuneUtils checkJailBreak] (TuneUtils.m:175)
6 PhonePe 0x1012e6cf4 -[TuneConfiguration updateShouldAutoDetectJailbroken:] (TuneConfiguration.m:433)
7 PhonePe 0x1012e8058 -[TuneConfiguration setShouldAutoDetectJailbroken:] (TuneConfiguration.m:626)
8 PhonePe 0x1012e5090 -[TuneConfiguration setDefaultConfiguration] (TuneConfiguration.m:132)
9 PhonePe 0x1012e4e60 -[TuneConfiguration initWithTuneManager:] (TuneConfiguration.m:62)
10 PhonePe 0x1012d2f78 +[TuneModule moduleWithTuneManager:] (TuneModule.m:25)
11 PhonePe 0x1012a05fc +[TuneManager instantiateModules] (TuneManager.m:66)
Where i can get iOS 9 SDK With BitCode enabled , Mixpanel and Flurry already did this , please compile it , yours library is only one dependency that have not supports BITCODE .
MobileAppTracker.getInstance()
returns null
when tune
gets garbage collected. getInstance()
should check for null
value and re-initialize. Thoughts?
Updated from 4.3.0 to 4.5.0 and we see the following crash when rotating the phone. (If I simply change back to 4.3.0 with no code changes the crash doesn't happen).
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{MyActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.support.v4.app.FragmentHostCallback.getContext()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4077)
at android.app.ActivityThread.-wrap15(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.support.v4.app.FragmentHostCallback.getContext()' on a null object reference
at android.support.v4.app.FragmentState.instantiate(Fragment.java:100)
at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:2053)
at android.support.v4.app.Fragment.restoreChildFragmentState(Fragment.java:1282)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1272)
at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:2144)
at android.support.v4.app.FragmentController.dispatchCreate(FragmentController.java:190)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:351)
at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:85)
at com.gogobot.utilities.app.GogoActivity.onCreate(GogoActivity.java:41)
at com.gogobot.gogodroid.GogobotMenuActivity.onCreate(GogobotMenuActivity.java:357)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4077)
at android.app.ActivityThread.-wrap15(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
at android_release_aar_dulkhoq89m33wxqb89a5btma5.run(https://raw.githubusercontent.com/blundell/release-android-library/master/android-release-aar.gradle:43)
Incremental java compilation is an incubating feature.
The TaskInputs.source(Object) method has been deprecated and is scheduled to be removed in Gradle 4.0. Please use TaskInputs.file(Object).skipWhenEmpty() instead.
FAILURE: Build failed with an exception.
Hi,
We recently upgraded to 4.10.0 from 4.4.0 and we've received multiple reports of this crash
java.lang.IllegalStateException: Timer was canceled
at java.util.Timer.scheduleImpl(Timer.java:558)
at java.util.Timer.schedule(Timer.java:456)
at com.tune.location.TuneLocationListener$GetLocationUpdates.run(TuneLocationListener.java:249)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5317)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
We haven't personally seen this issue but this happens in all OS versions starting Lollipop.
If it's of any help, here's how we initialize Tune.
Tune.init(app,tune_advertiser_id,tune_converion_key );
Tune.getInstance().setShouldAutoCollectDeviceLocation(false);
What could've possibly been the problem?
Thanks for the help.
Xcode will treat the lack of annotations as implicitly unwrapped optionals, which will cause exceptions if you pass in nil, which in many cases is a valid value for properties or arguments. It also forces calls to treat new instances as optional when they don't need to be.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.