Is it ok to hide a "Developer mode" in my app? - user-interface

I have an mobile app. While in debug, I need to test several different stuff, so I created a button that shows a list of these tests.
Even in Release, some things are different (Apple Push Notification). So I need to test in release too.
Is it ok to leave these shortcuts hidden when releasing the app?

Doing so would leave a massive security hole in your application, which should be avoided at all costs. In fact, if you're creating an iOS app, I doubt such a hole would get by Apple's independent release testing.
Ideally, you should be using separate coding environments for development, testing and production. When you're developing, you should be using one of the various simulators to test as you work. There's an in-built one in XCode that can simulate a variety of Apple devices, and if you're using something like Ionic, you can hook it to a live preview in a web browser.
Once you're happy that things are working on your computer, you then should be deploying a development .ipa / .apk file. This file should only be released 'in-house', manually. If that's all good, you move on to testing. For testing, create a secondary file, and this can be distributed for external testing through something like Apple TestFlight.
For production, you'd remove any 'backdoors', as in theory, your app would be ready for the public. At this stage it's a simple matter of releasing it through either the Google Play Store or Apple Store.

Related

How can I test an older version of my app in Google Play Store?

I'm using Google Play Store to distribute an app.
For a certain issue, I would like to install an OLDER version of my app to one of the client's device.
I'm struggling to do so, is there any way to do that?
No matter how and which "testing" method I apply, Google Play automatically shows the HIGHEST version of the app which is the "release" version ignoring the old test versions.
Creating an APK would be NO way because I need Google Play's own signature in the apk to make things work (to test the things we would like to)
Is there any way at all to distribute my OLDER app version from Google Play store?
(By the way Google's testing methods are inexpressibly unusable even apart from this problem. You never see what really happens, you cannot really manage the testing channels the GUI is miserable the notification email is late the testing is slow and painful you don't see the version number in the Google Play Store, there are like 3 methods to do so and the difference between them is not self explaining, I give 1 start to the developers who made these parts of Google Play I hope they read this.)
Thanks in advance.
From Google Play Console go to App bundle explorer
Then choose the version you want to install
Go to Downloads tab
click on Copy sharable link
install it from you device using this link
Note: the device's Google Play account should be an internal tester and enable internal testing from Google Play on this device.

Convert server-generated site to PhoneGap/Cordova app?

What's the lowest effort way to get a site with server-generated pages (in my case Laravel/PHP) running as a PhoneGap/Cordova app? I'd rather not have to convert the whole thing into a single page app before importing into PhoneGap/Cordova.
Is it possible to use PhoneGap/Cordova as a very thin wrapper and still load each page live from the server? And if so, how exactly please? I don't think we need any native phone APIs.
Reason for the whole thing is my client insists on "having an app" even though obviously our site will work in a mobile web browser and can have an icon on the user's phone.
Many thanks
Unfortunately for your app to pass Apple App store approval it will have to provide some basic functions and display correctly without an internet connection. This means at a minimum, if you plan to generate content on a server you will probably need the Cordova plugin for network information:
https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-network-information/
I would make sure you are familiar with the Apple Human Interface Guidelines:
https://developer.apple.com/ios/human-interface-guidelines/overview/design-principles/
You will probably also need to bundle any JavaScript. Apple is very picky about apps that download code (this can include JavaScript).
This is a section from the iOS developer Agreement.
3.3.2 Except as set forth in the next paragraph, an Application may not download or install
executable code. Interpreted code may only be used in an Application if all scripts, code and
interpreters are packaged in the Application and not downloaded. The only exceptions to the
foregoing are scripts and code downloaded and run by Apple's built-in WebKit framework or
JavascriptCore, provided that such scripts and code do not change the primary purpose of the
Application by providing features or functionality that are inconsistent with the intended and
advertised purpose of the Application as submitted to the App Store.
The following is my opinion only
My fear is that if you go at it in a low effort way, best case you will fail app approval. Worst case it will leave users with a poor experience or worse, a poor image of your client. Do it properly and give the app some extra functions that you can't have in a browser alone. I would advise your client of this and see if they would like a proper app that engages their customers and provides them with a great experience.

What is Xamarin Test Cloud for?

I am working on developing a Xamarin hybrid (html+js+css) application for Android using Visual Studio for iOS.
My client wants to upload builds (of the app) to the Xamarin Test Cloud. I am new to Xamarin, so I have no idea about Xamarin Test Cloud. I have done some research and found that we can write test cases in our application and send them to Xamarin Test Cloud.
So far I understand it, Xamarin Test Cloud is only for app testing purposes, not for sharing buildAs with multiple users or clients. Am I right or not?
Please let me know more about Xamarin Test Cloud, i.e what are the uses of it.
You are partly correct.
Xamarin Test Cloud is an automated testing solution. You are able to run UI-tests on every platform. This will allow you to see how the application performs on the many android devices and versions, as well as the different versions of iOS. Xamarin Test Cloud however is limited to UI testing (and crash reporting based on your testing scenario). Unit Tests and Integration tests (mostly technical tests) cannot be performed by Xamarin Test Cloud.
In order to distribute the app to test-users you should use HockeyApp. HockeyApp has recently be acquired by microsoft (source) and allows you to distribute your app to a closed group of people for feedback (usually used for User Acceptance Tests (UAT)). Note: HockeyApp will soon be integrated with Microsofts' Application Insights service where it offers more features (insights in performance of your app, time used, time looked at Activity X etc) - see how to set this up
So in short:
Xamarin Test Cloud - Automated UI Testing on hundreds of devices
HockeyApp - User Acceptance Tests with distribution
Xamarin Insights (or Microsoft Application Insights) - insight in the usage of your app on different levels.
Correct. TestCloud is used to run your app on thousands of devices at once to figure out how your app behaves and how it looks on many different device quickly and without having to actually buy thousands of devices. It is not for sharing your app with specific users. If you want to share your app with specific users, you can either use HockeyApp for iOS and Android or you can use TestFlight for iOS and the Google Play Store's Beta program for Android.
In short Xamarin.Test.Cloud is a cloud service for automated UI tests.Those UI tests can be written in Calabash and/or C# NUnit project in form of unit tests. Most of the developers use C# version form od the framework. This Xamarin product is called Xamarin.UITest which is created locally with Xamarin tools and uploaded to Xamarin.Test.Cloud.
More in depth...
Xamarin.UITest which most of developers use is basically NUnit C# project in Viusal Studio or Xamarin.Studio. It loads user's apk (Andriod) or ipa/app (iOS) file and prepares everything for testing.
Testing might include:
exploring UI (detecting content, widgets/views/controls names and content)
interacting with UI (tapping, scrolling)
recording interactions from 2. so they can be used in automated tests
https://developer.xamarin.com/guides/testcloud/uitest/
API is not complex, but needs some [short] time for learning. Maybe more for tricks like working with pickers (especially in Xamarin.Forms), backdoors, gestures etc. My daughter is 15 and she's doing talks on Xamarin.UITest, because it is that simple and nice for kids to learn coding and feel "productive".
Sample interaction:
app.Tap( c => c.Marked("Login") );
Another useful command is: tree - to see Visual Tree (DOM) of the Ui presented.
NOTE:
Xamarin.UITest is not limited to apps written in Xamarin!
It can be used with Android app written in Java, iOS app written in objective-c/swift!
Xamarin.UITest differs for hybrid apps, because the DOM is actually HTML DOM. Hence - try exploring DOM with tree command.
With Xamarin.UITest and nunit runner you can test locally on your devices and/or emulators/simulators. 15 minutes limit is removed if I can recall correctly.
Xamarin.Test.Recorder is useful tool for exploring and recording Xamarin.UITests. On Mac this should be standalone app and on Windows you'll need Visual Studio Enterprise (restriction).
https://developer.xamarin.com/guides/testcloud/testrecorder/
Xamarin.Inspector from package called Xamarin.Interactive is another standalone tool for analysing and inspecting UI of the app.
https://developer.xamarin.com/guides/cross-platform/inspector/
When UI test is written - the project output (dlls) are uploaded to the Xamarin.Test.Cloud. To get project output you'll need Xamarin.Studio or Visual Studio with Xamarin tools installed.
Before upload there are several steps user needs to do like: selecting devices (number depends on pricing), getting APIKey for particular tests. Uploading is done through commandline...
https://developer.xamarin.com/guides/testcloud/uitest/working-with/submitting-tests-to-xamarin-test-cloud/
Then user goes to XTC (Xamarin.Test.Cloud) portal and checks results (reports, screenshots etc).
This is how it looks like behind the scenes (this is what I like to show during my talks):
https://youtu.be/PQMBCoVIABI?t=3432
Handsome Danish guys (which cannot play handball) on stage and 2000+ devices on the shelves (it was 1900+ devices in 2015-09) in the datacenter...
For sharing - use HockeyApp
For monitoring - use Xamarin.Insights
NOTE: HockeyApp and Xamarin.Insight are being merged to single product for beta-testing and monitoring (TestFlight like).

Which update mechanism should I apply to an around 30m app?

Now I have an around 30M app, when I need to make an update for the app ,I want to update only a little part of the app,what shall I do with the app? Should I make a updating app for the app or should I make it like downloading the whole new app every time?
I forgot to say that it is an app running on the Mac OS, not iOS.
Without more context, the best answer is "It depends". Off the top of my head, I can think of these factors which would affect your decision:
How many users use this app? What is
the bandwidth availability of these
users?
Do you expect the users to download and install the app? Or do they need
an automatic update? Has anybody
asked for an automatic update?
Is it a desktop app or is it a client server kind of situation?
Have you already split up the app into components so that you can ship
just a small component, replace it in
the deployed app and expect the whole
thing to work?
Edit: Based on context in the comments: Since the app is a playing music from some online source, I'm assuming it'll need to connect to some central server to play the music. You could make a small wrapper application around the music app. You'll need to change the installer such that the wrapper app's icon appears on the desktop and any launchers you have. So the user will launch the wrapper app first instead of your music player app. The wrapper app can then contact the central server and ask for the latest version of the music app. If the installed version of the music app is older, then the wrapper app can either automatically download the latest version of the music app or prompt the user to download it or .... Once the download and install finishes the wrapper should launch the music app as well. Depending on your situation, you can get fancy and make the wrapper app download only the changed portion of the music app, etc.

how to make web application?

I want to implement web application using xcode?is it possible?if yes then then please advicse me?
example:http://pinoypay.com/iphone/
While I have no personal experience with it I think you are looking for Dashcode rather than Xcode for developing web applications such as the one you linked.
It's located in /Developer/Applications/Dashcode after installing the developer tools.
You can read more about using Dashcode to develop web applications in the Dashcode User Guide.
Is it possible? Yes.
Is it convenient or pleasant? No.
I'm sorry but from the question, it appears you are trying to run before you can walk. Or possibly even crawl.
XCode is not required to build an iPhone styled website, only to write an iPhone application. You would be better off starting with some HTML-CSS tutorials.
XCode is an IDE. You can use it to build a web application but you must use some kind of web application framework in the first place.
The best option is to use one of the frameworks becoming available and maturing.
In the first instance as has been said look at Dashcode, particularly the latest release as this has templates for web based apps and will actually generate the code for dual, Browser and iPhone app so the resultant code will function in both.
The there are a number of third party solutions of varying quality, ease of use and documentation.
In no particular order there is:
IUI library
webapp
iWebkit
jqtouch (this is jquery based)
phone-universal
quickconnect (which has large parts of an OReilly book devoted to it)
All of these give you the javascript and the css to make a web app look and feel and act like a native iPhone app (to one degree or another).
Dashcode is excellent for some solutions as it gives you access to all the Apple tools and has reasonable IDE. The result then runs on a normal web server.
Quickconnect actually has Dashcode templates which you load into Dashcode and build the first part of the app in, then this is exported and imported into Xcode and you completed the project in Xcode and deliver it as a Web App for the iPhone.
Thee other frameworks can be used and developed with any tools, Textmate, Eclipse etc. and the resulting code it then run on a normal web servers
In my opinion, yes.
And while xCode does not target to the web development as other software (like Brackets, DW, etc.) it has a nice feature: a drop-down menu of javascript functions, which would be extremely useful to have in other web development IDEs...

Resources