I recently started testing my Gluon Mobile app on my iOS device, but sometimes when I open my app, this popup occurs. Is there any way to fix or avoid this?
The default architecture when deploying on iOS with JavaFXPorts is thumbv7, as you can see here.
This means the app is created in 32 bits mode.
Since iOS 10.1, Apple is trying to push developers to update their apps to 64 bits mode.
While creating 32-bits apps doesn't mean they have less performance, if you want to avoid the message you need to create the app in 64 bits mode.
For that you can change the arch parameter:
command line:
./gradlew -Probovm.arch=arm64 launchIOSDevice
or on your build.gradle file:
jfxmobile {
ios {
arch = "arm64"
...
}
}
Related
I have a brand new Samsung A10 with Pie on it.
I'm attempting to run the Sample Application provided in MediaPlugin:
https://github.com/jamesmontemagno/MediaPlugin
At first I was getting this error when I tried to build:
Invalid value 'armeabi' in $(AndroidSupportedAbis). This ABI is no
longer supported. Please update your project properties to remove the
old value. If the properties page does not show an 'armeabi' checkbox,
un-check and re-check one of the other ABIs and save the changes.
Then I did some reasearch and went to Android Properties / Android Options / Advanced and unselected armeabo-v7a.
As I understand it this will remove 32 but support, which I'm fine with.
Now I get this error:
ADB0020: Android ABI mismatch. You are deploying an app supporting
'x86;x86_64;arm64-v8a' ABIs to an incompatible device of ABI
'armeabi-v7a;armeabi'. You should either create an emulator matching
one of your app's ABIs or add 'armeabi-v7a' to the list of ABIs your
app builds for.
I'm targeting a new A10 Samsung phone with Android Pie on it. I can't see where to set the 'device ABI', though why would a new Pie phone be interseted in armeabi-v7a anyway?
Where can I set the 'device ABI' or otherwise fix this?
I can't find anything on Google. Thanks.
UPDATE
I've found this work around which is as worrying as it is bizarre:
Untick the armeabi-v7a option
Build
Re-tick the option
Build
Deploy
from
https://forums.xamarin.com/discussion/146174/vs2019-error-this-abi-is-no-longer-supported
I'd like to understand what's going on here rather than just work around it.
This is only an issue with my A10 physical Samsung phone, in emulators it seems to work fine.
I got this error before. You could untick all the supported architectures to tick all of them like below. Delete the obj and bin folder of project to clean and rebuild. Most of times, it works.
Different Android devices use different CPUs, which in turn support different instruction sets. Each combination of CPU and instruction set has its own Application Binary Interface (ABI).
For more support of Android ABIs, you could refer to the Android ABIs guides.
https://developer.android.com/ndk/guides/abis
To fix this issue on a Xamarin.Forms Android application, Right click on your android project and then select Properties > Android Options > Advanced.
You will see a dropdown for supported architectures. Select x84 & x86_64.
The app should now build and run on the emulator.
go to your project folder and edit yourproject.csproj
and remove starting <AndroidSupportedAbis> line completely.
add:
<AndroidSupportedAbis>armeabi-v7a;x86_64;arm64-v8a;x86</AndroidSupportedAbis>
save and debug. (changes accept on visual studio)
Enjoy.
Do not setup retry abis on xamarin.
I changed to Debug mode from Release mode after signing a release.
For Mac:
Android Project -> Option -> Android Build -> Advanced. Then tick all.
Click Option from Solution Explorer for Android:
Click Android Build then Advanced:
Since I'm using Xcode 9, all unit tests communicating with keychain are broken. It also happens with Xcode GM. As I traced, there is no OSStatus errors while reading and writing but reading from keychain returns nothing and causes failure for all unit tests using keychain. I've already faced something like this when Apple released Xcode 8 with iOS 10 simulator which keychain was not working and Apple fixed that in Xcode 8.2. Is anybody else facing this issue with iOS 11 simulator too? Any idea on this?
Finally we found the problem. As #Gix said the problem is with unit tests inside our framework. The SDK tests don’t have an app context, so don’t have the/a keychain available. But actually we didn't want to move the tests from SDK into app as you did #Gix. So we could fix the problem just by adding an app target in the SDK project, then set that as host for the SDK unit tests. Now unit tests are passing. But I still don't understand why its only failing in the new Xcode. We realize it's not an iOS 11 Simulator issue because the same failure happens with iOS 10 simulators in Xcode 9 too. So this restriction is a property of Xcode 9 Simulator app which can be fixed with the solution I provided. It is still messy but it works and you don't need to move tests from SDK into app!
Just figured this one out on my side, so I thought I'd let you know in case you are having the same issue.
My problem was the way I have my project set up. In my project I have a workspace with 3 projects, 1 is the Main App, 1 is a framework/library and 1 is the Pods project. I was accessing the keychain in my framework, and my unit tests target was part of this project.
After extensive discussion and work with Dan Federman from the team behind the library Valet (which you can find here), we figured out that my unit tests target needs to be part of the project where the Main App is. Once I copied all of my tests from the library project to the Main App project, everything ran and worked just fine.
Hope this helps!
Environment: Version 8.2 beta (8C30a)
My schema list only devices.
How do I change the iOS version in simulator?
I can see the available iOS Simulators...
...but they're not listed in the schema list.
Nor is their a way to discriminate amongst the iOS versions within schema manager.
The list of available simulators is dictated by three factors:
It will not show you simulators whose iOS version is prior to that of your current app's deployment target. If you want to see some recent, prior iOS simulators, make sure your app's deployment target is set accordingly.
If you go to Xcode "Preferences" - "Components", you can confirm which iOS simulators are installed on your machine.
In Xcode's "Devices" window (shift+command+2), as shown in the snapshot in your original question, you can configure particular simulator devices for your Xcode environment.
Open your xcode and press command + shift + 2.
Click on left bottom + button and your new simulator with required iOS version.
Click create, now you are ready to use the new simulator.
After adding the #availability & #availability flags which allowed me to get a successful compiled under and older distribution target, I noticed that the iOSes came back:
I am making small circle divs with a 7px diameter
I applied the hardware accelerated = true in my config and I have added
-webkit-transform: translate3d(0, 0, 0);
-webkit-transform: translateZ(0px);
to the css class of my div element. Why does it still display it in this "low quality"-style?
On other mobile devices I have tested on they where rendered smoother. I am aware that it does depend on the hardware of the device but could someone please elaborate how to correctly apply the above, so it at least "would" work if the hardware requirements are met?
Thanks in advance.
The Cordova WebView is the system webview and thus, it is different depending on the Android OS version you run your app on. Could you tell us what version of Android is the device you are testing on?
Also, when you mean "on other mobile devices I have tested on" which are those? Other Android devices with other Android OS versions or iOS devices? Please, provide some more feedback.
Anyway, the problem could be that the webview does not support hardware acceleration CSS 3D transformations. I would recommend you to check a solution like WebView+ from CocoonJS or Crosswalk from Intel. The WebView+ is a webview based on Chromium for Android 4.0+ devices, so no more fragmentation on Android (the same environment no matter what Android OS version you execute your app on) and all the power of Chrome executing your app. It is very easy to test using the CocoonJS Launcher: https://play.google.com/store/apps/details?id=com.ideateca.cocoonjslauncher&hl=en
Go to Your App and point to the URL where your app is to be able to test it (similar to a web browser). Then you can compile the final app using the CocoonJS Cordova Command Line: http://support.ludei.com/hc/en-us/articles/202568973-First-steps-with-CocoonJS-CLI or the CocoonJS Cloud compiler for Cordova apps.
They also provide the WKWebView for iOS 8 with the WebView+ (just in case you are also interested in iOS with improved performance): http://blog.ludei.com/build-phonegap-cordova-apps-using-the-wkwebview-right-now/
You can also test it using the CocoonJS Launcher for iOS: https://itunes.apple.com/us/app/cocoonjs-by-ludei/id519623307?mt=8
Hope this helps.
I have a phongap app with a sqlite plugin that runs in both android and iphone. When I try to run it in Ripple i get several errors depending on the inclusion of the cordova version and device I use. Non of them are working at all. In some comments in stackoverflow i've seen people running sqlite in phonegap under ripple.
I'm using the PG-SQLitePlugin-Android plugin in my project, which it acually only supports Phonegap 2.7.0+.
I've found that i can force Ripple to use 2.7.0 by calling it :
file://localhost/Users/----/----/----/www/index.html?enableripple=cordova-2.7.0
Ripple actually loads great after enabling access to file system through chrome.
When i include cordova-2.7.0.js in my script
The index.html pops me a pop up with the following text :
gap:["Device","getDeviceInfo","Device119187522"]
that i can accept or cancel, then 2 more dialogs appeare, if I accept it gets hanged.
the js console shows that cordova 2.7.0 is really running :
Falling back on PROMPT mode since _cordovaNative is missing. Expected for Android 3.2 and lower only. cordova-2.7.0.js:906
deviceready is not fired
When i include cordova-2.9.0.js in my script
It happens the same as 2.7
Falling back on PROMPT mode since _cordovaNative is missing. Expected for Android 3.2 and lower only. cordova-2.7.0.js:906
but this time I get this other errors
Failed to load resource file://localhost/Users/laullobetpayas/-------/---/------/www/cordova/cordova_plugins.json
Failed to load resource file://localhost/Users/-------/---/------/www/cordova/cordova_plugins.js
deviceready is not fired
When I don't include any cordova.js in my script
SQLitePlugin.js:31
Uncaught ReferenceError: cordova is not defined SQLitePlugin.js:34
Am I using the proper plugin ?
which is the propper version of cordova / device tu run with the plugin and ripple ?
Do i have to include the cordova.js in my project
Hel will be very apreciated, it's for a long time that I'm trying to solve this.
Thank you in advanced.
Phonegap plugins won't work with Ripple because the idea of a Phonegap plugin is that it provides a Javascript interface in order to execute native code. That means, in the case of Android, the Javascript will invoke native Java code and in the case of iOS, the Javascript will invoke native Objective-C.
Ripple is purely Javascript-based, so the Javascript part of the plugin has nothing to interface with.
In the case of the SQLitePlugin, for example, calling SQLitePlugin.close() results in the call:
cordova.exec(null, null, "SQLitePlugin", "close", [this.dbname]);
where SQLitePlugin is the native class name and close is the native function name.
If you want to use the same storage API across Android, iOS and Ripple, maybe consider using lawnchair with appropriate adapters.
As for the issues with Ripple and Phonegap 2.7.0/2.9.0, Ripple has not quite caught up with Phonegap, so you will get these popups and error messages in the console, but that will not stop your Phonegap app (without native plugins) running in Ripple. You can convince yourself of this with a simple test case like:
document.addEventListener("deviceready", function(){
alert("I'm alive");
});
But the answer is, yes, you do need to include cordova.js in order for it to work at all in Ripple.
The Cordova-SQLitePlugin is a drop-in replacement for the HTML5 SQL API, so when running inside Ripple you don't need to call the Cordova layer you can just replace calls to sqlitePlugin.openDatabase() with window.openDatabase(). I've not yet tested this with Ripple but it should work. There are some database size limitations but this is probably all you need for testing.
There several ways to test if your inside Cordova. You could create a shim for the openDatabase() method based on testing for Cordova on app startup.
Since your primary goal is really to do rapid testing of SQLite with Cordova (rather than specifically to use Ripple) I'd like to suggest another new alternative to using Ripple.
I wrote an app call Sencha Touch Live that can be used for rapid development of Cordova / HTML5 apps by allowing you to Live Edit and Debug the HTML/JS/CSS code on your mobile device simply by updating files on your development computer - so you can skip most recompile/redeploy/restart debugger time costs. It has tons of other cool features. I'm using it myself for SQLite app testing instead of Ripple or Weinre
Detailed overview and Step by Step Guides
Installation Guide
It's based on the code from Adobe's PhoneGap Developer App so core code is well tested. It's been extensively adapted and tuned for Sench Touch framework though it should also work for jQuery Mobile or any framework that places HTML5 code under the phonegap/www or cordova/www folder. Just start up the server in you PhoneGap or Cordova project folder.
For testing your SQL and controller logic, I recommend using Geny Motion emulator with a version of Android 4.4.x KitKat. Start up an recent version of Chrome on your desktop and once you get your app working on the emulator or real device open chrome://inspect and now you can use the full Chrome debugger on your remote device app. You can also use a recent version of Safari for OSX/iPhone Simulator testing.
You can watch a demo here (starts at the 5 min. mark). Yes! It needs a more polished video with less echoes but you'll get the idea:
https://www.youtube.com/watch?v=94J4HBB0f7I