I am trying to validate my application, i am going through the doc and it says
Before archiving your application, ensure that the binary is self
contained. That is, if it relies on static libraries, ensure that
those libraries are part of the application binary by setting the Skip
Install build setting to Yes in the Release build configuration of the
target that builds and archives the application.
After following the above step, and when i archive the app i am not seeing the archived file on the table below (in the Organizer). Why is this and how can i submit my app to Validation ? (not submit to app store, Only validation)
Note: When i set Build configuration to Ad Hoc it Archives correctly (and displays in Organizer), but when i set Build configuration to Release, the archive file doesn't get displayed in the organizer.
Setting Skip Install to YES can be problematic sometimes, I'd only use it if you're having a specific problem that it solves. The Xcode users guide isn't as up-to-date as it should be, particularly for recent releases where the archive process has changed significantly.
Try turning Skip Install back to the default NO, and be sure to use the Product > Archive command rather than Build for > Archive.
Related
I have updated a currently submitted Titanium app and added a watch extension using swift.
Everything works fine if I build and test on sim and build directly to device. I only get an issue when I submit the app to the Apple app store (via XCode Organizer).
The binary submits, passing validation but I get am email from iTunes Connect as follows:
Dear developer,
We have discovered one or more issues with your recent delivery for "xxxxxxxxxxx". To process your delivery, the following issues must be corrected:
Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it.
Once these issues have been corrected, you can then redeliver the corrected binary.
It seems as though it may be related to a build setting: Embedded Content Contains Swift Code.
It looks like this needs to be set to Yes if the Titanium project contains embedded Swift.
As of now I am stuck as I cannot submit the app. Is this a Ti problem or is there another step I should follow?
XCode: 7.3, SDK: 5.2.2.GA - Project created and built using only the Ti CLI.
First you should check your .ipa file by
unzip yourapp.ipa
If the only Payload exists, the Apple reject your app.
You should create SwiftSupport/iphoneos directory and put the appropriate
swift library files.
You can know which libraries are necessary by checking Payload/yourapp.app/Framesworks. But this library files can not be used as SwiftSupport/iphoneos.
You must copy the appropriate libraries from your mac's /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos directory. The file names are same as the above Payload/yourapp.app/Frameworks but the contents are different.
After you get the Payload and SwiftSupport directory, do package these directories by
$ zip -r yournewapp.ipa Payload SwiftSupport
(Remark: remove all .DS_Store files if exist)
Then Apple accespt yournewapp.ipa.
For future reference: I had to Archive the Titanium project through Xcode because one of my third-party libraries requested to execute a script in the Build phases.
Received the same message from Apple and fortunately fixed it just changing the Embedded Content Contains Swift Code to No.
You should choose "Save for iOS App Store Deployment" option at the time of exporting ipa file.
This issue has now be resolved, there is a new version of the Titanium SDK, 6.0.1.GA that specifically has a fix in for this issue. I have now created, submitted and have a Titanium app with associated watch app now published in the app store.
I'm trying to find out if it's possible to get any information out of the plist used to install an enterprise app onto a device to then store for the app to use.
What I'm trying to do is pass some information to an app on install so that it can then use that information within the app. I can't make this data static, so it can't be stored in the Info.plist file in the root; it needs to be dynamic and will change on an install by install basis. I also can't pass the information by a web service etc, it needs to happen on install.
Many thanks,
Davoc
Since you're distributing for enterprise (ie not through the App Store), here's a thought: since you can re-codesign an app package after it has been built, and an ipa is simply a renamed zip, why don't you put the app on the server as an unzipped package, and have a server side script insert the settings.plist, zip and codesign the app every time someone downloads the app?
In Summary:
1. Compile the package, but don't code-sign it.
2. Place the app folder (*.app) onto a server.
3. When the user downloads it by requesting a link, have the server generate your desired url into a plist and overwrite the existing settings.plist in the bundle
4. Code-sign the package using apple's codesign tool via command line
5. Zip the whole thing and rename to .ipa
6. Serve the package to the client.
I read in the iOS Enterprise Developer Program docs that a provisioning profile can be embedded with the application.
I am wondering how this is done. Is it simply added to the Payload directory of an IPA, or included in the project directory?
I also wonder whether this technique is generally available for all deployment modes/Programs, or is it just for Enterprise distribution deployments?
The file should be called embedded.mobileprovision
It should be placed inside the .ipa zip file, in the directory Payload/.app/
XCode's "Build and Archive" then "Share..." functionality automatically adds it (so you can use unzip on the .ipa generated by XCode's share feature to see where the files should go).
I'm unclear exactly which scenarios this is supported in, however it definitely works for adhoc builds when you're installing directly from the web onto the device (ie. using the method described here: http://developer.apple.com/iphone/library/featuredarticles/FA_Wireless_Enterprise_App_Distribution/Introduction/Introduction.html )
On the Apple guide, there is a step before building the AppStore version:
Open the Xcode project and Duplicate
the “Release” configuration in the
Configurations pane of the project's
Info panel. Rename this new
configuration “Distribution”.
Why this step is needed? Can I skip this step and use the "Release" configuration to build the final version for AppStore?
If you keep your release and appstore configurations separate you're able then to test your application built with exactly the same settings as it will go to appstore and switch to that configuration with 1 click. It may be not necessary but (imo) is really handy.
Another reason may be that while developing you may want to play a bit with some project settings and be sure that your experiments won't go to distribution build by any chance.
You could name it "DebbieGibson" as long as you remember you set that configuration up for App Store distribution.
My projects reference static DLLs I've created. These projects are setup to make sure a corresponding build phase occurs. Meaning, if I build in simulator/debug, the static library will have an up to date simulator/debug build. I can verify my app works fine except for device/release. Is there a way to verify device/release? It's sort of like throwing it over the wall to Apple without any verification.
My recommendation is to use the Release configuration to build with your development profile, and create a new Distribute configuration. The new configuration should be identical to the Release configuration in all ways except that it uses your distribution certs for signing rather than your development certs.
To do this, just go into your project settings, go to the Configurations tab, and duplicate the Release configuration, then rename the duplicate to Distribute. Then go to the Build tab, select the Distribute configuration from the drop down, and change the Code Signing Identity to use your distribution certificate.
Now you are ensured that the output of the two configurations is the same except for the code signing step. If you change build settings in the future, just delete and recreate the Distribute profile to ensure all the settings are the same.