I'm creating an iOS app that essentially uploads video files to a cloud server, among other things. To make it more useable, I'd like to implement an Open with/Share with my app button. When you open the camera roll on iOS devices, select a video and click the Share button, a list of compatible apps shows up. I'd like to place my app in this list.
I did some research on the Internet, and found I had to add the file type to my plist file, so I added:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>LSItemContentTypes</key>
<array>
<string>public.video</string>
<string>public.movie</string>
<string>public.mpeg-4</string>
<string>com.apple.m4v-video</string>
<string>com.apple.quicktime-movie</string>
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeName</key>
<string>Moment</string>
<key>LSHandlerRank</key>
<string>Owner</string>
</dict>
</array>
</plist>
My app isn't showing up, however. Am I doing something wrong here?
LSItemContentTypes is for the document controller. Since you're wanting to do this from the camera roll, you may be looking to create a Share Extension.
Related
I want to build an iOS app that can receive images from photo library. So I registered the document type public.image (also tried with public.jpeg or public.png) in Xcode.
But if I click on share in the photo library the app doesn't show up as a receiver.
If I do the same in files app, the app is show in the UIActivityController and I can receive the image. Is there a special permission needed or what can I do to make it work straight out of the photo library?
info.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>CFBundleTypeName</key>
<string>image</string>
<key>CFBundleTypeIconSystemGenerated</key>
<true/>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
<key>LSItemContentTypes</key>
<array>
<string>public.jpg</string>
<string>public.content</string>
<string>public.image</string>
</array>
</dict>
</array>
</plist>
I tried different variants of the plist and different kind of apps projects ( document based and not)
is there something new in iOS16, because some time ago I had an other project and it works just fine. (iOS 14 I think, not sure)
I've got an Alloy app and I'm trying to put some configuration into the Settings app in iOS.
I've added the Root.plist file here:
/app/platform/iphone/Settings.Bundle
The file looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>Service</string>
</dict>
<dict>
<key>DefaultValue</key>
<string></string>
<key>Key</key>
<string>username</string>
<key>Title</key>
<string>Email address</string>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
</dict>
</array>
But nothing appears in the settings app for me. Any suggestions?
There used to be an iOS bug in the simulator where if your app was running, even in background, when a new version was installed, the settings were not updated until you completed closed the app and relaunched it. Closing the simulator with the app running did NOT resolve the issue. TBH, I have not tested this lately, I am just in the habit of closing my app before I rebuild. Try completely closing your app, then relaunching it and see if the settings update.
When you setup Universal Link support in your iOS 9 app, by putting an apple-app-site-association file on your server and getting the app setup to handle the linking, you automatically also get smart banners on your site whenever you are viewing a page that is supported by your app.
Like this:
These are automatic banners that appear, without us putting any meta tags on our site. They only appear when the user is at the top of the page and pulls down (from what I can see).
My question: Where is Apple pulling the title for the banner from? In the above example, the "Yelp" that appears above the "Open in the Yelp app" line, where does that come from? What we're seeing on ours is: the app icon, the OPEN text on the right, the "Open in the XXXX app," but no title, just a blank area above that line.
I've tried adding some of the meta tags discussed here, but it still doesn't seem to work.
I'm a bit afraid that the answer is going to be that Apple indexes some property off your webpage to get the title. The reason I'm afraid is because these particular pages are not accessible to the general public. 😬
It looks like the title is coming from the iTunesMetadata.plist itemName key. I'm guessing this is only present in distribution ipa file.
<key>itemName</key>
<string>App Name</string>
The iTunesMetadata.plist Contents
The following is an example of of typical iTunesMetadata.plist file used to define the iTunes information for an Ad Hoc distribution:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIRequiredDeviceCapabilities</key>
<dict>
<key>armv7</key>
<true/>
<key>front-facing-camera</key>
<true/>
</dict>
<key>artistName</key>
<string>Company, Inc.</string>
<key>bundleDisplayName</key>
<string>App Name</string>
<key>bundleShortVersionString</key>
<string>1.5.1</string>
<key>bundleVersion</key>
<string>1.5.1</string>
<key>copyright</key>
<string>© 2015 Company, Inc.</string>
<key>drmVersionNumber</key>
<integer>0</integer>
<key>fileExtension</key>
<string>.app</string>
<key>gameCenterEnabled</key>
<false/>
<key>gameCenterEverEnabled</key>
<false/>
<key>genre</key>
<string>Games</string>
<key>genreId</key>
<integer>6014</integer>
<key>itemName</key>
<string>App Name</string>
<key>kind</key>
<string>software</string>
<key>playlistArtistName</key>
<string>Company, Inc.</string>
<key>playlistName</key>
<string>App Name</string>
<key>releaseDate</key>
<string>2015-11-18T03:23:10Z</string>
<key>s</key>
<integer>143441</integer>
<key>softwareIconNeedsShine</key>
<false/>
<key>softwareSupportedDeviceIds</key>
<array>
<integer>9</integer>
</array>
<key>softwareVersionBundleId</key>
<string>com.company.appid</string>
<key>subgenres</key>
<array>
<dict>
<key>genre</key>
<string>Puzzle</string>
<key>genreId</key>
<integer>7012</integer>
</dict>
<dict>
<key>genre</key>
<string>Word</string>
<key>genreId</key>
<integer>7019</integer>
</dict>
</array>
<key>versionRestrictions</key>
<integer>16843008</integer>
</dict>
</plist>
Is there a way to create an option in Bundle settings of iOS 7+ in such a way that it's only readable for a user. The user shouldn't be able to edit this within the option menu.
During the first use of the application I will set the above property and unique value.
Writing down the unique id in a database is not a option. The user should see this value in the settings menu of the app, provided by iOS.
Using the IMEI is not a option since the value is undergoing some kind of validation mechanism in the app itself.
You can use a PSTitleValueSpecifier for this. It will display a value that is readonly. Below is an example Root.plist file that shows a user Account Number in the App Settings. When the application start up, you can programmatically update the value and it will show up as read-only on the App Settings page.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSTitleValueSpecifier </string>
<key>Title</key>
<string>Account Number</string>
<key>Key</key>
<string>account_number_preference</string>
<key>DefaultValue</key>
<string>012-345-6789</string>
</dict>
</array>
</dict>
</plist>
I uploaded a plist file but when I go to that link to get the ipa, the plist file is only displaying the text, and not doing anything else. Something is going wrong here and I don't understand what.
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>http://rentaid.info/clarktest/Clarktest2.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.rentaid.testapp</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>Clarktest2</string>
</dict>
</dict>
</array>
</dict>
</plist>
you cannot just open the manifest file via standard HTTP scheme becasue nothing useful will happpen. you need to create a link to your manifest file with a special scheme, and that link can work on the device only.
the link with the custom sceme should look like this:
itms-services://?action=download-manifest&url=https://rentaid.info/clarktest/manifest.plist
IMPORTANT: make sure your server has proper SSL certificate, because on iOS7 or above the device won't download the IPA file, if the hosting server has no SLL certificate.
Just uploading the plist file and try to open up willn't help you to get the app. you should hyperlink like this
<a href="itms-services://?action=download-manifest&url=http://example.com/Application.plist">
Install This App
</a>
Check this out tutorial 1
Check this out tutorial 2