Distributing a pref pane which includes a background app on the Mac App Store - objective-c

My app is a pref pane which includes a background application in its bundle.
I wonder if anybody has already figured out the best practice for distributing a "pref pane only" app via the Mac App Store. Are there already any pref pane apps in the store?

Apple states apps containing preference panes are not "self-contained", they install code or resources in a shared location that is not allowed by the guidelines hence in violation of both 2.15 and 2.30 in https://developer.apple.com/appstore/mac/resources/approval/guidelines.html

Let me start by saying that I have not submitted any apps that contain system preference panes (in fact I have not submit any apps to the Mac App Store, only the iOS App Store). This answers is based on my reading of the guidelines and my understanding of how OS X works.
I've read the Mac App Store guidelines and I don't see that they preclude system preference panes. 2.15 says:
Apps must be self-contained, single application installation bundles, and cannot install code or resources in shared locations
Finder treats a .prefpane file like any other file - Finder launches the app which handles files of this type (i.e. System Preferences.app) and opens that app and passes the file as an argument. When a .prefpane file is opened System Preferences.app asks the user were to install it (in the System Library or the Users Library). It is System Preference.app that is 'installing' the .prefpane.
If an app were to include a .prefPane in its bundle and a mechanism for allowing the user to open file in Finder then I do not think the above guideline would have been contravened.
I find it hard to believe that Apple wants developers to cluttered up users menu bars with unnecessary icons when they have already provided a much better solution.
I'd like to know if anyone has tried to submit an app that provides an option to install a system preference pane. I'd also like to know if I've missed some documentation from Apple which discuss this (besides the guidelines quoted above).

Related

Missing dSYM files in Crashlytics Today extension (Bitcode disabled)

The title of this question basically says it all. I enabled Crashlytics in my Today extension, and for some reasons, the dSYMs are not being uploaded, even though I'm not using Bitcode.
I tried uploading them manually (from ~/Library/Developer/Xcode/Derived Data/Timelines-evxmjnxmpmcivkavmpijzakaxkrp/Build/Products/Debug-iphoneos/Timelines.app.dSYM), but the web interface doesn't really give me any feedback. It shows this screen:
No matter how long I wait, once I refresh the page, it goes back to the 'upload dSYMS' screen.
I think the problem might be that the UUIDs of the missing dSYMs don't really match those that I found locally.
Some notes on my setup:
Xcode 8.2
Today extension running on iOS 10.2
Bitcode is not enabled.
Fabric and Crashlytics integration was done using CocoaPods.
Archive wasn't uploaded to App Store. I'm just testing it locally on my devices. But since the entry for crash reports was created in the web interface, I assume the automatic upload should work anyway.
My question basically is: how exactly can I upload the dSYMs manually? And, second one: how can I make the automatic upload of dSYMs work? Thank you.
It is described here completely ==> fabric.io.
As it said you can download it from activity tab in itunesconnect and then upload it to crashlytics website.

Testing Mac App Store app on real device - How to export?

I have been developing Mac App Store and iOS apps for several years now. I don't event want to know how many hours, days or weeks (?) I spend by solving provisioning problems...
One of my Mac apps targets OS X 10.7+. While everything works fine in genereal, after the last update some users reported problems when using the app on 10.7. Other OS X version work fine.
In the past, I simply cloned the project from my developing computer (iMac) to my MacBook running the specific OS X version. I then opened the project in Xcode, ran it and check what the problem was. This is far to easy for Apple, since this not possible any more.
The project only compiles (due to several reasons) in Xcode 7+ only. Xcode 7 runs on 10.10+, thus testing on 10.7 is not possible.
I have been trying to build/export the app to test it on my MacBook the whole day without any success. The app simply does not start on 10.7 on my MacBook. Of course the MacBook is a registered devices, included in my provisioning profiles, etc.
This is my workflow:
Removed all App Store specific entitlements from the app in Xcode/Target/Capabilities
Created new wildcard certificates and provisioning profiles that does not include any App Store specific entitlements
Selected the new profiles in Xcode/Target/Build Settings/Code Signing
Run Product/Archive
In Organizer select the Archive and click on Export
Here I tried several different combination (signing, no signing, etc.). No matter if I choose Export a Developer-Signed Application or Export as a Mac Application the result is always the same.
When I copy the created App file to my MacBook und start it nothing happens. The icon flashes once and this is all. Only the Console gives I hint about the Problem:
killed com.mycompany.myapp because its use of the com.apple.developer.team-identifier entitlement is not allowed.
Great... As explained I removed all entitlement from the app and from the profiles. Where the hack does this entitlement come from and how do I get rid of it?
Is there no way to test the App with all its features (== all entitlement) on another device?
I should have answered my own question earlier. Back in January I was somehow able to get the app running on my other Mac. Now I had to solve the same problem and it took some time to dig out the correct solution again.
So, maybe this will help others to solve the same problem. At least it will help my future-me to remember what has to be done :-)
Archive the app just as you would prepare the app to be submitted to the App Store.
Switch to the Organizer and select the just created archive
Select Export... instead of Upload to App Store...
Select Export a Developer ID-signed Application(second option). DO NOT select Export a Development-signed Application (third option). Actually I have no idea what's the difference is, but only the first one works...)
Click Next and the Organzier will fetch provisioning information from your dev account. DO NOT select the fetched provisioning profile but select Use local signing assets from the dropdown box instead
Click Choose and Export in the next step.
Done
Good luck and happy app signing...

OSX How to display only one icon in dockbar for same application launched from 2 different locations

I have an application with FinderSync extension support.
I want to achieve silent update for this application. The only approach that I came up with at this moment, is installing the new version of the app into ~/Library/Application Support/../..., and whenever clicks the app from /Applications, redirect the user to Application Support one.
That means I will end up with two versions for the same app. One in /Applications and the other one in Application Support.
I have some issues after launching the application from both above locations.
If the user first starts the App from /Applications, selects Keep in dock, closes the app, updates the app by copying the new app to App Support and after that starts the app from App Support, I will end up with two dock icons.
Whenever I start the application, the FinderSync extension is automatically installed by the OS. It can be viewed in System Preferences->Extensions. Once the user quits the app and deletes the bundle, the OS automatically deletes the extension, so is no longer available in Extensions pref pane. However if I opened the application from both above locations, deleting the app from /Applications does not remove entirely the FinderSync extension from Extensions pref pane. Only after I remove the second application(the one from App Support), the FinderSync extension is removed from Extensions pref pane.
Are there any ways to overcome the above issues?
Please note that I have another question posted on a similar topic, while attempting to get rid of the above behavior using another technique, but I gave up using that approach a while ago:
OSX two dock icons for same application
Thanks

How can I compress Titanium Application Size after building it?

I built a Login application in which I have 3 Windows
Log In Windows
Registration Windows
After Log in details window about the user
In this application, the database stores data about user. The app is intended to be multi-platform & run on iPhone or Android.
When I install in device than it take 12MB or more Size (application size 12MB or more size).
How can I compress it?
Here are several things you can try:
Create a new Titanium project and deploy it to your device. This is likely the minimum size you can attain. Add this minimum size to the size of your Resources folder and the result should be around the same as 12mb. If so, there is little more you can do.
Check your Resources folder and remove anything that you don't want included in your app, such as .psd files. The build folders you mentioned in your comments have little to do with the actual app size.
Make sure you have not installed any modules. Check /Library/Application Support/Titanium/modules for any modules that shouldn't be there. I have 14 modules there by default, for example.
If you are very desperate, you can attempt to hack in Xcode to remove classes that you aren't using. See the responses by the "professional" developer here http://developer.appcelerator.com/question/133971/why-are-the-size-of-titanium-showcase-apps-so-small#answer-233668 This won't be easy and should only be attempted as a last resort.
In general however, there is no need to try too hard to reduce the file size. From my experience, even after adding a lot more windows and functionality, the file size barely increases by a couple of MB.
Also, note that your release file size can be smaller than the app you are testing on your device. See http://developer.appcelerator.com/question/126632/android-apk-filesize
From my experience with Android, if you are running the application on the device, vs. deploying the application, the app size is much larger. Try deploying and installing on device that way to see if it is any different. But Titanium already compresses the application.
Here are few questions which might become answer.
Are you using Mac for both Android and iPhone deployment. If so, the Android App would be of larger size compared to the same App deployed from Windows.
You might have splash screen, now go and check your folder here that you have any other JPEG files apart from the spash screen and ico file
\build\android\res\drawable
Which version of Titanium SDK are you using for building the Application? Try to compile the same Application using Titanium SDK 1.7.5, if you are using 1.8.1 and above.
Note: If you are trying to compile your App in Titanium SDK 1.7.5 for Mac, make sure you have XCode 4.2.1 for Lion and Not XCode 4.3.

IOS Ad Hoc Distribution Adding devices

I've created a Ad Hoc distribution profile with a couple of devices. If I want to add a couple of devices to the profile, I have to create a new profile and a build in XCODE for my app with the assigned profile.
Is there a way to make this easier? A way to make the management of the devices more simple? Without rebuilding and redistributing the app.
I hope someone can help.
You can't change the list of devices an ad-hoc app will work on without at least re-signing with xcode and redistributing the app. Sorry! I suppose Apple feel it opens up non-appstore distribution methods if you can add devices to an app already out there.
In fact you can!!
You don't have to recompile your project again. You don't even have to open XCode.
All you have to do is create a new mobileprovision file and distribute it with the existing app.
Your end users have to download and install the new mobileprovision file and app, by this order.
Here is a step-by-step.
Hugo MaurĂ­cio