Do you know how the App definitions in iHasApp are generated / can be updated?
It comes shipped with the following definitions;
https://github.com/danielamitay/iHasApp/blob/master/iHasApp/schemeApps.json
I have run this on number of devices with differing Apps and there are some that are not detected that I am certain have a scheme / URL but are not present in the current definitions. If I manually add their AppID's into the .json, iHasApp detects them and displays the App in the results as expected.
I have considered mining all released AppIDs from the itunes API but this seems like a hefty time intensive process and would populate the json with >600k AppIDs that may not be configured to work as a scheme / URL.
How is the best, most thorough way to update this with working AppIDs and (if possible) Facebook ID's?
Related
I am totally new in mobile app development and consequently very confused about how to get going (independent from how much I have read Google Drive API documentation over and over again.)
The way I would like to implement my (initially "android") mobile app (which I will develop by using ionic):
I will have a Google Drive account where I will have 1 CSV file. I will periodically renew the content of the file in the background (possibly twice a week).
The mobile app that I will develop will just retrieve the file from Google Drive, process the content and show it to the user in a more readable (easy to understand) format.
My app will not upload any data/file from the user device to the Google Drive. The app will only retrieve a file from Google Drive to show the content to the user.
Question 1) Does this approach make sense? I ideally would like to eliminate the work for back-end development. Or would you suggest another approach to do the same thing (with or without Google Drive)?
Question 2) The authorization process looks quite confusing to me as it is explained in Google's documentation. I could not find relevant information only addressing the scenario I have in my use case. Requirements: The mobile apps can fetch the corresponding file (or the content of it) and process it to show to the end user, but mobile apps (or any other client) may not update/edit/delete the file, cannot add a new file either. The only purpose of using the Google Drive will be to enable the mobile app fetching the data that will be shown to the user. How can this problem be solved by using Google's OAuth framework? A step by step action plan would really be appreciated.
ADDENDUM
You are also welcome to share your view if I should instead consider using Firebase for my problem, which I guess will be more costly.
Based on discussing the requirements with you, I would recommend against trying to do this with Google Drive API.
There are no tutorials out there for Ionic 4 + Google Drive API, and only a few for older versions. It will be an uphill struggle to create a solution that isn't going to scale well.
Instead you should start looking into using Firebase.
There are lots of tutorials which show you the basics: setting up a login system, and reading some data from the database.
The free limits are quite generous.
You can implement caching into your app so that you store a copy of the data on the device, and only refresh it either weekly, or more advanced, put a second table in that records the last updated date for the main table.
Firebase charges by reads so if you can set it up so that you only read one record (last updated) instead of downloading the whole database every time, then you can stretch your free tier a lot further.
If you do outgrow the free tier and the app is not generating enough to cover the costs then you have the option of investing time instead of money. There are guides in the docs about exporting the users and they provide tools so that the passwords can be put into another system without requiring the users to reset their passwords. The database can be similarly exported.
I'm creating a .framework (or a static library) for a component that I developed and that I'd like to sell to third-parties.
I was planning to add some code to protect the framework from unauthorised re-use, re-distribution or re-sale.
I think a good way to achieve this would be to ask to the purchaser to tell me what is the bundle ID of the app that will use the framework, save it in the framework as an NSString property and create a method that checks at runtime if the bundle ID of the app that is using the framework match or not.
However I'd like also to make the framework available to try for free. Therefore I want to enable the bundle ID check only then the containing app is compiled in released mode, or when the app is running on the end user device, outside the development sandbox.
Of course I can't use any methods that relies on variables or macros set in the project file, because they would be too easy to exploit. I need to do it at runtime... and without any action needed by the purchaser.
Is there a way to check at runtime if an app is running in the developer sandbox or not? Or if an app has been built with the release build profile?
Thanks!
In the past, I have implemented a simple time-bomb expiration in free to eval but not free to deploy components. The library would function up to certain date X, and then stop working. The user would just have to re-download the latest bits to continue evaluating. One paid order, a download link is provided without the the time-bomb or a license file with a digitally signed license disabled the time bomb logic all together. Relying on run-time environmental characteristics is fragile at best.
Basically I want to know if apps work and store data independent of one another or if there is a possibility for one app to modify another. Also...
In what folder are apps and their data saved on a phone?
If I modify data locally in an app, will the data be saved in a public place where other apps have access or is it saved to a folder specific to that app?
iOS is kinda not that mature in inter-app communication.
Data can be shared between apps using the system clipboard and transmitted over the network through mediums such as email and webservices.
iOS devices also provide a straightforward and well defined method for apps to send messages and data via URLs and filetype handlers. These techniques diverge into two categories:
Custom URL prefixes, e.g. someapp://something/somethingelse?somestuff=whatever
Custom file type handlers by file extension (e.g. *.txt) or by MIME type (e.g. text/plain).
Custom URL prefixes are useful for when two apps have established a specific protocol, while custom file type handlers are much more general, and are designed in a way that allows any app to register itself and participate. This article describes the latter: custom file type handlers for chemical data. If you register your app for a certain filetype it will look like so -
Reg. your second part of question - If I modify data locally in an app, will the data be saved in a public place where other apps have access or is it saved to a folder specific to that app?
As such, each application is restricted in terms of where it can store data on the file system of the device. iOS achieves this by allowing applications to read and write only to their own Documents and tmp directories. Within these two directories the corresponding application can create files and also sub-directories to any required level of depth. This area constitutes the application’s sandbox and the application cannot create or modify files or directories outside of these directories. Check this
The general answer to the first part of this question is: "No". Apps are inherently sandboxed and thus can not communicate between each other. There are a number of exceptions to this:
If you have access to a custom URL scheme for the particular app (Facebook Single Sign On makes use of this).
Opening a document type that is handled by multiple apps on the system (like when opening an attachment in Mail)
If both apps are developed by the same publisher, there are options to use UIPasteboard, iCloud shared Key/Value Dictionaries (only small datasets though), or accessing a shared Keychain Store.
UIPasteboard has some odd behavior as you can have system-wide pasteboards or application specific pasteboards, and there's no guarantee when its going to be cleared or not.
The second question - folder structure - is variable dependent on OS version but generally all applications are stored under the /var directory, followed by a subdirectory structure that utilizes UUIDs to denote the application and then the main app bundle, with the standard app bundle structure (including the Documents directory).
As for modifying data and storage, once again, generally "No". Some apps will utilize UIPasteboard for temporary data storage, but generally you won't know about that inside another application unless you've written the original app.
Generally speaking every app has only access to its own working directory and saves all it's data there. So no app does have access to the data of another.
Except a few of Apple's apps like Photos, Address Book, Calendar and so on. App's can use a well defined API to get access to them and do some (controlled) changes. In future iOS versions (beginning with iOS 6) the user will then be asked if a third party application should have access to the data of these few Apple apps.
There's no file-based solution from Apple directly to share data between apps yet (except the clipboard, which is a one-file exception).
I have an app on the App Store that needs to have its resource data files updated periodically (every 2-3 months). So far, I've just been deploying a new version of the app to the App Store every time I need to do this, but the fact that I have to wait a week or two for the changes to become live is cumbersome.
Theoretically, I was thinking of creating a new "version_control.txt" resource file which tracks the version numbers of every other resource file. Periodically, the app would check its version_control.txt against a version up on some web server, and then download any files that need to be updated.
Do there exist any frameworks or SDKs to handle all of this for me, or do I have to write everything myself? Is there a better solution?
You can't update the resources in your app bundle without updating the entire application. However, there's no problem with having your app retrieve resources from a web server and save them in your app's Documents folder. From there, it's simple to have the app look for its resources in the Documents folder before looking in its own bundle.
I don't know of any frameworks that manage resource versions for you. There's not a lot of work involved, and each app likely has its own requirements, so I'm not sure that a framework would help that much. If your web server supports it, you could request the resource file(s) each time your app runs, but add the if-modified-since header so that you only download a new copy if the version on the server is newer than the one your app already has.
I also had similar problems. I had tried to download some custom files from my ftp domain but that really didn't work very well. Not only I had to pay for the bandwidth, the users weren't very happy about it. The coding complicated considerably. Now, I've decided to update periodically via AppStore. The users are more satisfied since they see updates, but they don't understand is that only a couple of resources have been updated.
PS: I'm not aware of any SDK or framework for it. But you don't need it, you just need to download some files...
I'm putting on my thinking cap for this one, looking for a high level overview of possibility. I'm the author of an iPhone app that tracks user generated statistics. Data is essentially stored in a table on the device, with each entry having several fields/columns. Users can then sort that data, view graphs, and do other nerdy number crunching stuff. I want to take it farther and incorporate a sharing platform online. Game Center, Open Feint and other third party platforms are too narrow in scope. I'm interested in writing a web app, that users can visit to do three things:
Post New Table entries (automated by device)
View own entries and share via web (read only)
View other members table entries (read only)
Is Google App Engine a viable solution for this? My iOS app will require a POST URL, and the web app will need to save that authenticated user's data, and possibly return an "identifier" value to be referenced in the future in case the user needs to modify the item on the web. It will also require a GET URL to retrieve the authenticated user's statistics one by one or in total.
Next, the user will be able to visit the website and type in a "username" (probably email address) and see read-only statistics that have been submitted.
Thank you in advance for your input.
Sure, you could do all that with App Engine. If you wanted to, you could even make that local table of data sync with your app on GAE.
Really, there's not much on GAE that you can't do, although sometimes the database layer take some time to get used to.
My personal preference would be to set up a Django instance, but you could use any Python or Java-based app, depending on what you're comfortable with.
In short, yeah, you won't have any trouble doing basic REST work with GAE, and you could probably push it harder to do some more number crunching on those stats.