Xcode Provisioning Profile issue on GitLab CI Build machine - xcode

We have a team of developers that work independtly on separate apps using XCode, locally we can build etc and any issues with provisioning profile Xcode automatically sorts out.
We use GitLab as our main repository and have set up a runner on a Mac mini to handle our distribution builds.
Now generally this works fine, until we change our provisining profile (mainly by adding in app purchasing or push notifications). When this happens our local laptops auto syncs with apple and update the profile locally.
When we come to build on Mac mini, it fails due to profile not containing relevant info.
If we go to the Mac mini, load Xcode, build our projects, its fine after that but this step is causing problems, mainly as most engineers aren’t office based, so have to make a special trip in to sort the Mac mini.
Is there a solution to this?
How do others handle it?
IS there a command line option to force Xcode to update profiles before we build, which we could add to the CI script.
Is there a way of embedding the profile into projects?
Thanks

Related

Unable to install AppStore version directly to mobile device when using an iOS App Extension

At our company the process we execute normally is:
fix/implement
test ad-hoc version
create AppStore package
test that AppStore package by installing it directly through iTunes.
submit version to AppStore.
The reason why we need to test also the AppStore version is because some payment services wouldn't work if we didn't. So we need a real environment.
Previously to the inclusion of the iOS App Extension (sharing) we could do this process without issues, but now after doing the same process we can't do it anymore.
We can;
test the ad-hoc version by signing the app extension as ad-hoc.
create and submit the app store package.
However we can't install the app store version anymore, the error mentions that there are issues with the signature, more precisely:
(Entitlements found that are not permitted by provisioning profile)
Does anyone have any idea why this could be happening?.
You really shouldn't be able to install the app store version on a physical device and run it.
It can work in certain scenarios (like if you had previously installed development builds on there and there was a valid development build on the device when you try to run the app store build). Maybe the device has the old app provisioning profile (which would not have the app extensions entitlement). The new one that is embedded with the app (and has the appropriate entitlements) is an App Store provisioning profile and is not valid for running directly on the device.
I would make a new build config in your project that is a copy of the Release config, except for only the code signing settings. That would allow you to run a build that will be exactly the production App Store build, except for the code signing settings.

XCode - Always have to reset signing identities and re-download provisioning profiles

I'm building mobile apps using Xamarin-Visual Studio. I have a MacBook Air that is my iOS build host.
Every day or two I have to reset my XCode signing identities, re-download my provisioning profiles, and then reboot the MacBook. If I don't, I am unable to install the IPA on an iOS device (it creates an IPA file but just won't install to device).
Any ideas why?
XCode version is 7.3.1. My setup was working fine for months. It started doing this for no apparent reason about a week ago. I'll also add that I have another build environment with an iMac that started doing the same thing at about the same time.
Absolutely nothing has changed with my Mac and Windows environments (although I'm not sure Windows/Xamarin have anything to do with this. Seems like more of a glitch on the Mac side).
Thanks in advance!
Making comment above an answer since there has been no activity on this since:
If you are sharing a signing identity with other team members, if another team member needs to use the singing identity, they will need to reset it and redownload the profile. And when they do, you will have to do the same when you need to use it again. Resetting the signing identity basically creates a new certificate (with the same name) and thus invalidates the profile that used the "old" certificate.

Can you upload .ipa files to Testflight without Mac?

I am using Phonegap Build to quickly deploy and test my applications. For this to work, I had to go through an elaborated tutorial on creating provision files and certificates and borrow a Mac to make use of Keychain. By then however, I only registered one device UDID.
Now I want to add more devices, but I dont want to go through the whole process again, also what if I have to add other devices later?
So I was thinking to use Testflight, which only requires that you upload an .ipa file (apart from having a developers account etc). With Phonegap Build you can easily create these .ipa files.
However, since I am working with Windows, I dont see how I can upload the .ipa files on Testflight. Most tutorials online talk about using Xcode and some other Mac program.
Is there any way to upload it anyway?
Hacks might be available but since Apple integrated TestFlight into iTunes Connect - which (at this time) does not have a public API - the only official solution is to use Xcode or Application Launcher for ipa uploads. Both are only available for OS X.
An alternative solution might be to use an iOS CI/CD (continuous integration and delivery) service to do the upload. We happen to have one - bitrise.io, CTO here - but you can find a couple of other services as well.

Distribute App Outside the Mac App Store

I'm a newbie in OSX Development. I built an application in which will be distributed outside the Mac App Store. I have all the other certificates and keys working except for the Developer ID (App and Installer) for production.
I know that this may sound stupid, but for what it's worth, I just wanna make sure.
Will my app still be considered Developer ID - signed if I exported it as a Mac Installer Package instead of selecting Export Developer ID-signed Application, when I install it to its destination devices? Will it be successfully installed or be rejected with GateKeeper-enabled devices?
I have been scratching my head for this since for some weird reason, I cannot add a new Distribution Developer-ID from the Dev Center. I was able to add a Developer ID earlier this week however, I ran into some issues with my private keys. As per suggested by Apple and many other developers, I revoked all the Developer IDs and private keys to start fresh. The problem now is that I can't add any new Developer ID (Distribution). I cannot add in both Dev Center and by requesting through Xcode 5.0.1. I'm stuck.
I have submitted a Bug Report to Apple, but who knows when they'll be able to resolve it.
So now, temporarily, since I don't have any choice (I guess), I'll use the Mac Installer Package, but the question is, will it work?
Any help would be very, very much appreciated.
I've done this recently and have created a third Xcode project configuration to Debug and Release called Archive, which is a copy of Release except the app is signed using the Mac App Distribution / Third Party Mac App Developer and, confusingly there is a third name used for this same certificate.
I then changed the Archive scheme to use the Archive configuration to build.
Before doing this I had errors on some Macs when signing with my Developer ID, in some cases they claimed the app was corrupted, and in other cases I got gatekeeper blocking the app, forcing me to override it in System Preferences > Security & Privacy.
I personally use xcodebuild (from Jenkins) to build the app for distribution to testers, which I package in a .dmg so they only need to drag it to /Applications or ~/Applications and I do all that using a script within the Jenkins configuration. Your experience may differ to mine if you are using the Xcode app instead.

Xcode Instruments is stripping symbols despite all build settings to the contrary

Problem
Instruments' Time Profiler is stripping all symbols except system libraries from my app, despite the fact that I have disabled this behavior in all relevant build settings in Xcode — but only on one development machine. The other dev machine behaves normally.
Description
Instruments' Time Profiler is stripping all symbols except system libraries, despite the fact that I have disabled this behavior in all relevant build settings in Xcode — but this is only happening on one of my development machines. I have two development machines running the same version of OS X, Xcode, and Instruments, and each machine is using an identical copy of the same Xcode project with identical build settings, schemes, and other configurations, and the app is profiled using the same test device (iPhone 4S with the latest public version of iOS 5).
Machine 1
- Mac OS X 10.7.4
- Xcode 4.3.2 (4E2002)
- Instruments 4.3 (4321)
Machine 2
- Mac OS X 10.7.4
- Xcode 4.3.2 (4E2002)
- Instruments 4.3 (4321)
Steps To Reproduce
Open included sample project on each machine.
Make sure the iPhone 4S is selected as the test device.
Select Product > Profile
When Instruments launches, select Time Profiler and continue.
Run the app.
Notice how the symbols are stripped when running on the iMac (Machine 1) but not on the MacBook Air (Machine 2).
Expected Behavior
Symbols from my own code should appear in the Time Profiler on both machines.
Regression
I have tried all of the following, with no change in the actual results:
Rebooting the machine.
Trying other Xcode projects
Deleting the "Derived Data" for all projects in the Xcode Organizer.
Re-symbolicating the document in Instruments (carefully selecting the correct DSYM file in ~/Library/blahBlahBlah…)
Final Notes
Here is a link to a .zip file of a sample project: Sample Project .zip
I was finally able to get it to work by a method that's just shy of a nuke-and-pave scenario:
Make absolutely sure all symbol stripping is disabled for your current build configuration. Make sure you've done this for your Release config if that's what's being profiled for Instruments.
Delete the app from the iOS device.
Restart the iOS device.
Restart the Mac (I don't trust Xcode or Lion at all to quit all relevant processes otherwise).
Launch Xcode, go to Organizer > Projects and delete Derived Data for the affected project.
Clean your project. Hell, why not?
Build and profile for Instruments.
Choose the Time Profiler in Instruments for clarity.
The first run will not show the symbols, but don't quit. Leave Instruments running!
Re-symbolicate the document in Instruments, navigating carefully to the correct dSYM file for the current build. This should be easier since you've deleted the derived data in step 5.
Now you should be able to see your symbols. It helps if you hide non-objective-C symbols.
Why do I suggest that you delete the app and restart the iOS device in Steps 2 and 3? I have a suspicion that Xcode doesn't perform a clean installation of each build, but may install deltas, such that the symbol addresses present in Instruments are a mixture of the current build plus previous builds. If so, then this issue is even more common for someone like me, who shares a single test device between more than one Mac. This assumption could be wildly incorrect.
If the above steps don't work for you, please let me know in the comments. I'd like to create a detailed radar report at some point in the future.
I'm not sure that it has been fixed in the 4.3 but this is a known problem in 4.2 seen here
Instruments
There is a known issue with the Profile action from Xcode 4.2. After a build in which no source files have changed, Instruments will be unable to gather symbols for the target application.
This affects projects where both:
The Release configuration is selected for the Profile action.
(default)
The Strip Linked Product build setting is set to "Yes”, or
a custom Run Script build phase strips the product. (non-default)
The workaround is to do any one of the following:
Perform a "Clean" on the product before initiating the Profile
action.
Do a Clean of the product and temporarily set the Strip Linked
Product build setting to "No" while Profiling.
Set the configuration of the Profile action to Debug.
Run successive profiles directly from within Instruments when you do
not need to rebuild. When developing Mac apps, using the GC Monitor
template in Instruments may cause Instruments to crash. To
workaround the problem please consider migrating your application to
ARC.
I've had a similar problem for days. I was able to profile the Debug configuration, but not Release. First I tried to make a copy of the release configuration (as suggested somewhere on the web), but that copy did not work either.
Then I made a copy of Debug, called it Profile, tried it and the symbols of Profile were shown in the profiler. Great! I then changed the optimization levels etc. to the same as Release, and now it works! Just wanted to share this, as this comment would have spared me hours...
Have been facing the same and stumbled upon this thread.
I realized that I first profiled the app with release build and after changing the scheme in Xcode for the same app, the profiler was still unable to symbolize. I have tried all obvious solutions you mentioned above but in vain.
The profiler somehow is still referring to the first build (release build)'s settings and hence it is not able to symbolize. So, I just changed the app's bundle identifier for testing purpose so that a new app is created altogether for profiling purpose. I could check the code where leaks exist now.
Try it out and let me know if this works for you too. Still pondering over why Instruments is failing to symbolize though.
I had a similar issue where I had no symbols in my os x application that I built from the command line (so in this case it is not an iphone or xcode issue). It turned out the problem was due to a bad DYLD_LIBRARY_PATH that contained my PATH. When I got rid of all those non-library paths, such as /usr/bin/, it worked.
I have a lot of third party frameworks whose symbols and binaries are unfortunately getting lost.
Additionally, my app's binary was getting lost.
I.e. if I selected File > Symbols, clicked my target, and found the similarly named item, the Binary Path was showing up red.
The solution was to go to Instruments > Preferences > Symbols, and add /Users/<MY_USER>/Library/Developer/Xcode/DerviedData to the search paths. Library is not indexed by Spotlight. After doing this, I have at least had the symbols for my app. The little circle next to my app's name goes from Yellow to Green when I do this, and persists between restarting Instruments, unlike other solutions to manually set the binary.
Let me know if you can tell me how to get all the ones for my third party frameworks. I use Carthage for some, others installed manually. Have had no luck with these yet.
I've managed to solve this by:
Disconnecting the device
Deleting the iOS Device Support files for the device's version of iOS in ~/Library/Developer/Xcode/iOS Device Support
Reconnecting the device and letting Xcode reinstall device support.
To be safe I first quit Xcode and Instruments, deleted derived data, and did a clean build as mentioned above, but no need to delete the app or restart any devices this way.
Try open XCode 3 and him Organizer. And try add from this Organizer a devices to both machines.
Just open Organizer and wait him processes. If you're see a button "Use for development" then click him.
Sometimes, XCode 4 can't add a device a truely for full development.

Resources