Do I really have to put a company identifier into my app? (Like com.example)
When my app arrives to the app store will it be a link for a website?
I don't have a website, so do I have to create one?
Is there any way to not put the company identifier?
No, I think this is not like as you thinking about it.
A bundle ID precisely identifies a single app. A bundle ID is used during the development process to provision devices and by the operating system when the app is distributed to customers.So there is no need to add name of the company or etc.
The bundle ID string must be a uniform type identifier (UTI) that contains only alphanumeric characters (A-Z,a-z,0-9), hyphen (-), and period (.). The string should be in reverse-DNS format. For example, if your company’s domain is Ajax.com and you create an app named Hello, you could assign the string com.Ajax.Hello as your app’s bundle ID. For More you can review this document about by AppDistributionGuide Apple
And As when we submit the app it requires some links of website as i put Apple.com as i di't have website.
As the Support URL is for that provide support for the App that you submitting on App store and another one is for providing the information that you submitting on App Store.
You should setup at least a basic web site for your customers, for support and so you can show a little more about your app than what the App Store allows. You can setup cheap (but decent) hosting at Squarespace.com or something similar.
I definitely wouldn't put Apple.com as your support URL. I've actually seen apps rejected because the web site they linked to for support wasn't available when they reviewed the app. That was a few years ago, not sure if they're still strict on that.
The idea for the bundle id is to ensure you pick something unique that won't conflict with others. If you use com.example.myapp, but don't actually have the example.com domain, it's possible you'll conflict with someone who does have example.com.
Related
I try upload new version of my app and I do it directly from XCode. After succesfull upload I do not see new build online on AppStore connect, but XCode says that upload is done.
As You see, 1.0.52 is created by Xcode but empty. 1.0.38 is my old build when all was ok. Any idea how to fix it? I can manually create iOS build on AppStore Connect and add package from my computer?
AppStore Connect didn't return any error, but now I found email on my developers email account. I missed one value at info.plist, similar problem like there: NSAppleMusicUsageDescription - Missing Info.plist key
But about it I didn't have any information on AppStore Connect, only on email.
Part of email:
Dear Developer,
We identified one or more issues with a recent delivery for your app, "**** ***" (***** ***). Please correct the following issues, then upload again.
ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSAppleMusicUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
I am developing a firefox web extension (Add On) which communicates with my Native Mac Application through "Socket Connection". I got stuck with the requirement to authorise the Client (Socket client from firefox add on) as I am unable to find out a unique identifier for my unpacked firefox add on.
I am trying to map the unique Id in the application side so that I can check whether the add on with same Id is trying to connect to the Socket server which would be restricted in case of unauthorised Identifier.
The identifier that comes along with Origin header in the connection request is Internal UUID of the add on which changes on each installation as per Firefox documentation.
I welcome an answer that could guide me to choose a perfect unique identifier or different approach that could validate the add on.
To have it work in this scenario, you will need to add in the applications key in manifest.json
Once you have finished developing the extension, you can package it and submit it to AMO for review and signing. If the packaged extension you upload does not contain an ID, AMO will generate one for you. It's only at this point that the add-on will be assigned a permanent ID, which will be embedded in the signed packaged extension.
Check out MDN webdocs for the full information on that though. They have full guides on how to use AMO as well.
I'm working on implementing my own analytics system. One part of it consists of tracking where users originated from. I use UTM tags for this. Reading UTM tags from the query parameters is quite easy in Android, iOS and web. However, I also want to track app installs.
I want to be able to share URLs to the Play/App store with UTM tags and mark the user's first session in the app with those tags. Android has a great solution for this: pass the referrer query parameter containing the UTM tags to the Play Store URL and after installation, the UTM tags will be available. (source: https://developers.google.com/analytics/devguides/collection/android/v4/campaigns)
However, the App store doesn't support this kind of tracking. I'm trying to figure out what the industry standard is for tracking app installs. I've seen the following solution:
Share a URL to your own domain. (e.g. myredirectdomain.com?utm_campaign=test)
Save the client ip, screen resolution and UTM tags in a DB table if the client is an iOS device
Redirect the user to the App Store
Once the user installs the app, the app will send the client ip and screen resolution to your server which checks if those are recently added in the DB.
If so, the corresponding UTM tags are returned and the user's session will be marked with those.
Of course, this will most definitely result in some false positives. I've been trying to figure how other companies do this. I've stumbled upon Google Analytics' implementation which utilizes the iPhones IDFA (source: https://developers.google.com/analytics/solutions/ios-install-tracking). However, the IDFA doesn't seem to be available to the mobile browser.
Do you know what the industry standard is for tracking app install campaigns?
Short answer: there is no industry standard in attribution tracking for iOS. Just google the term "app attribution tracking" and see how many service providers show up. They all use some kind of device fingerprinting and call it their "secret sauce". I've used different services in parallel in the past and results were most of the time very different. (Localytics, Flurry, Tapstream)
The "official" recommended way from Apple is to use their own App Analytics attribution tracking. For that you add a provider token(pt=) and a campaign token (ct=) to your store links. You can get your provider token directly in iTunes Connect. You can nicely combine this with the App Store Affiliate program. The only downside is getting the information out of Apple's App Analytics/iTunes Connect. There are no official APIs to get your hands automatically on the raw data.
Sources:
https://developer.apple.com/app-store/user-acquisition-marketing/
https://developer.apple.com/app-store/app-analytics/
App Store Connect gives you the possibility to create Campaign Link that you can use to track Install. I can't remember when it was release but you can find it in :
App analysis -> Sources -> Campaigns -> Generate Campaign Link.
Of course, this is not a classic UTM to track it in Google Analytics, but it can help
There is a solution for IOS apps to track campaign via Google Analytics.
For IOS you do not need to add UTM parameter but you have to make URL as below:
http://click.google-analytics.com/redirect?
tid=UA-1234-1 // Google Analytics Tracking ID.
&idfa=BBA44F63-E469-42BA-833A-2AC550310CB3 // Identifier for Advertising (IDFA)
&aid=com.bundle.myapp // App ID.
&cs=network // Campaign source.
&cm=cpc // Campaign medium.
&cn=campaign_name // Campaign name.
&url=https%3A//itunes.apple.com/us/app/myApp/id123%3Fmt%3D8 // Redirect URL to iTunes.
For reference please view the link:
https://developers.google.com/analytics/solutions/ios-install-tracking
For in-app purchases for iOS we can use an online API for validation, meaning that we can validate the purchase on our own server.
Is there any way (API) for such validation of in app purchases for OS X?
I've found only this snippet about in-app validation for Mac and it seems that Apple doesn't provide any API for online validation.
Or maybe there is some plan from Apple to support online validation for OS X?
My app EasyBooks provides an online component that users pay yearly for. It wouldn't make sense to provide this as a non-consumable type as it only really works as a consumable (however it's really a non-repeating subscription in iOS). I would like to offer this in-app and I think I have a solution finally...
I used one of my Apple DTS tickets to query a statement made in the StoreKitGuide document. It says ...
"OS X supports both the server validation method described in this
chapter and the local validation method..."
I got a reply from Apple saying ...
"The steps for verifying your In-App Purchase products for Mac
applications are the same used for iOS applications. The difference is that you will be assigning your base 64 encoded app receipt (rather than the content of the transactionReceipt property) to the receipt-data field. Retrieve the full Mac App Store receipt for your application, then encode it using base64 encoding. Create a JSON object with a single key named receipt-data and assign your encoded receipt to it. Proceed as outlined in the Verifying a Receipt with the App Store section of the In-App Purchase Programming Guide.
Note: In App Purchases receipt are included in the associated Mac app's receipt. You must check the receipt associated with your app to verify the validity of the In-App Purchase receipts that it contains. Doing so also allows you to enable the appropriate functionality in your app."
So after some failed attempts, I did manage to get this working with the caveat that the receipt data returned by Apple's servers does not contain the 'hash of the GUID' and therefore does not tie the receipt data to any particular hardware.
This can be tested on your Mac quite easily using these steps:
Find the Mac app receipt file (it's in your app's bundle once you've run the app and entered your (test) Apple ID and password.
At the command line, base64 -i receipt will base64 encode the receipt with no line breaks (that's important)
Again at the command line, curl -d '{ "receipt-data": "<your b64 string here>" }' https://sandbox.itunes.apple.com/verifyReceipt
This returns JSON data in the format
{"status":0,
"environment":"Sandbox",
"receipt":{"adam_id":"0",
"bundle_id":"uk.co.geode.easybooks",
"application_version":"2.2.7",
"download_id":"0",
"in_app":[ {"quantity":"1",
"product_id":"uk.co.geode.easybooks.syncing",
"transaction_id":"1000000034508678",
"purchase_date":"2012-09-05 12:00:17 Etc/GMT",
"original_transaction_id":"1000000034508678",
"original_purchase_date":"2012-01-24 10:16:17 Etc/GMT"} ]}}
I have not confirmed it yet, but apparently (according to the Apple engineer) any consumable types of in-app purchase will be added to the receipt when first purchased, but removed after any further purchases or restore operations. I wonder whether it might be a good idea to make the code running in the app make a copy of the receipt file after each purchase just in case our own servers are down at the time the app tries to validate the receipt. Users may otherwise try to restore purchases, not realising this will remove any consumable product receipts.
I hope that helps.
(ORIGINAL COMMENTS FOLLOW)
I have the same issue. I have an iOS app in the store that has a mix of consumable and non-consumable products that can be purchased in-app. The consumable product is a service, which is fulfilled by my webserver. In the StoreKit delegate method paymentQueue:updatedTransactions:, I use the transactionReceipt property, which is an NSData object. I encode this to base64 and send it to the server. Out on the server I pass the receipt to Apple's servers for validation.
But for Mac OS, there is no transactionReceipt property on the SKPaymentTransaction, so we cannot validate receipts in the same way.
We can do the non-consumable products, which may help you. When an in-app purchase is made on Mac OS, the receipt is updated in the app bundle. It is then possible to parse the receipt file looking for each in-app receipt, which are all stored in the receipt file in the main bundle. For more about that see http://developer.apple.com/library/mac/#releasenotes/General/ValidateAppStoreReceipt/_index.html
This works fine for me when I use the non-consumable product, but I have one consumable and this is not updated into the app's receipt file. Without the transactionReceipt property, I don't see any way for my server to validate that the receipt is genuine. If anyone else has any other experience please let us know!
Anyone with an Apple developer account can also read about this on the Apple developer forum:
https://devforums.apple.com/message/548411#548411
SwiftyStoreKit is popular:
https://github.com/bizz84/SwiftyStoreKit
InAppReceipt for local receipt validation:
https://github.com/tikhop/TPInAppReceipt
From a web browser (Win/Mac) I need to launch a desktop application and pass it a response string (e.g. XML) from the webserver. For Windows, as far as I can tell I have two straightforward options:
Set the application as a default program, and respond in a standard way so the browser associates the response with that extension/Content-type. The browser validates the association, stores the response to a temp file and the app opens it.
Register a protocol, which causes the browser to launch the app, passing the URL to it. In this case apparently the string needs to be something like Base64-encoded (yet shorter than the browser's URL length limit). Otherwise I'd store the file on the webserver and the URL would be given to the app to request itself. This seems to be less than ideal, but iTunes uses it (itms://).
Which is generally easier to register by app installers across platforms? What I don't know at the moment is the particular installer framework being used by this app.
I have NO development experience with this but I think it's all about what you are developing and the business model.
Option 1
Would be useful when you create some sort of custom meta data file which can be viewed nicely in an application.
Company X has their own XML Schema's. Customers can download their data in that format.
Company servers serve these files with their registered/custom content-type. Customer can install an application that handles that content-type. Application development is focused on supporting the XML Schema's and build an interface upon it.
Option 2
Would be useful when you distribute content online.
Apple turned their iTunes business model into a protocol. So every channel (web,browser extensions,mobile apps,desktop,mobile sites,company devices,etc) they want market share can use that protocol. Application development is focused on supporting the protocol (business model) and build an interface upon it most fit for the channel.