The language system language of my application is displaying in english, for exemple when IOS ask me the autorization for geolocalisation, it's in english. Or the button "Done" on the right side of the keyboard is in english too. Problem is, it should be in French since this is my IOS language. It's only in IOS.
I know there is a way to translate them because I have an another Ionic application where this works, but I don't have the source code.
I guess it's somewhere in the xCode settings ?
The answers was in How to change cordova-camera-plugin language in iOS?
I needed to change the language here:
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>fr</string>
<key>CFBundleLocalizations</key>
<array>
<string>nl</string>
</array>
<!-- other values omitted !-->
</dict>
</plist>
But Im sure there is another way to do it, because this solution is not very good. It's only temporary, because if we delete the platform the change will be lost.
Related
I implemented two Custom Intents with Sirikit in my iOS app. When I was developing them I had iOS 13.3 installed in my iphone and one of my intents has a Siri Dialog prompt asking for the value of one parameter. All the app is translated to english and spanish and the custom intent worked nicely in both languages.
When I updated my iphone to iOS 13.4.1 my custom intent started to have the following issues (I saw both issues depending on the installation/test/device):
Siri asking for the parameter value as if I wouldn't put any custom dialog with the standard phrase "What value do you want for param?" (more or less)
Siri asking the Siri dialog prompt in english and not in spanish even when the rest of the phrases and Siri responses of the rest of the Intent and the app are correctly translated into spanish. The only translation that is not working is the Siri Dialog prompt.
I find this issue very strange and annoying. I tried to recreate the translation files for Intent.intentdefinition: Intent.strings (Base), Intent.strings (English), Intent.strings (Spanish) and I even tried to recreate the whole Custom Intent definition and I'm still having the issue.
I also tried to change the iOS language and Siri language on my phone, restart, reinstall the app, intents, etc...
This is the Info.plist of my Sirikit extension:
<?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>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>InventorySearchIntent</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>IntentsRestrictedWhileLocked</key>
<array/>
<key>IntentsRestrictedWhileProtectedDataUnavailable</key>
<array/>
<key>IntentsSupported</key>
<array>
<string>NumTotalItemsIntent</string>
<string>SearchItemIntent</string>
</array>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.intents-service</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).IntentHandler</string>
</dict>
</dict>
</plist>
Any solution for this? Is it a bug from iOS 13.4? Siri integration is very important for the app that I'm developing and this is a blocker for me.
Thanks in advance!
In my own experience, this issue is fixed in iOS 13.5 beta 4. I just tested it in an iPhone 6s Plus with Xcode 11.5 beta 2 (11N605f).
However, there are other issues still. For example, in Shortcuts, all operation strings in my test project are shown in English, not the localized language.
Also, INStringResolutionResult.confirmationRequired(with:) doesn't work as expected.
I have a function gets the words user says and looks them up in database then uses INStringResolutionResult.confirmationRequired(with:) to check with the user. SiriKit currently only uses the words the user says, not the result that I check with the user, which leads the final code crashes.
UPDATES
I just got the reply from Apple's bug report team. Here are the conclusions I make for now.
When switching languages, Siri some times, if not all the times, has an issue of using the default sentences to replace the sentences that a developer provides.
Installing Siri profile and reboot may fixed above issue on Siri of current setting. But if you change the language of Siri, the issue is still there.
There were regressions on APIs of INStringResolutionResult. For single result, both open class func disambiguation(with stringsToDisambiguate: [String]) -> Self and open class func confirmationRequired(with stringToConfirm: String?) -> Self wouldn't work on iOS later than iOS 13.3. Siri used a placeholder called "name" instead of the actual value.
iOS 14 Update
I am still seeing the following behaviour (as reported by Owen Zhao) with iOS 14:
When switching languages, Siri some times, if not all the times, has an issue of using the default sentences to replace the sentences that a developer provides.
I observed that rebooting the iOS device after language change is (still) fixing the issue.
Localize your intent definition file to all languages that your app supports
Ensure that your Xcode project identifies localizations by the ISO 639-1 language identifier scheme (additional information on the schemes). Older Xcode projects may use a different language identification scheme and should be updated.
If your app has not yet been localized, ensure that the selected Siri language in Settings matches the CFBundleDevelopmentRegion of your Xcode project, and the value of this key is in ISO 639-1 format
Hope this works for you
Dark mode support was added to version 2.20.31 (released in March of 2020) of the WhatsApp client. This is an iOS 13-only feature, and from the look & feel it appears to be a fully native implementation. I think it is safe to assume that the app is now being compiled with iOS SDK 13.0 or above.
The thing is, as of iOS 13, Apple now requires the native call screen to be shown whenever a VoIP notification is received - otherwise, the app will not receive any further VoIP notifications. In previous version of iOS, some apps (including WhatsApp) appear to use "fake" incoming VoIP calls to silently wake up the app in background when the user attempted to use the web client, so that the latter could then connect and exchange data directly with the phone.
However, as of the latest version, the web client still appears to work as it did before despite the restriction introduced by Apple. Using a debugger it is possible to observe the iOS app waking up whenever the user opens the web client on a PC, but no call screens are ever shown. This can be done repeatedly and as often as we want.
The logs from WhatsApp seems to confirm what is written above:
default 17:09:44.515731+0000 callservicesd Call source <CXXPCCallSource 0x111ecb0a0 identifier=UKFA9XBX6K.net.whatsapp.WhatsApp isConnected=1 processIdentifier=417 isPermittedToUsePublicAPI=1 isPermittedToUsePrivateAPI=0> registered with configuration <CXProviderConfiguration 0x111e9bb40 localizedName=WhatsApp ringtoneSoundURL=(null) iconTemplateImageData=0x0 maximumCallGroups=1 maximumCallsPerCallGroup=1 supportsAudioOnly=1 supportsVideo=1 supportsEmergency=0 supportsVoicemail=0 supportsCurrentPlatform=1 includesCallsInRecents=1 audioSessionID=1151157 supportedHandleTypes=2>
If we try to do this with our app, the results are quite different:
error 18:56:19.949023+0000 callservicesd Killing VoIP app com.xxxxx.xxxxx.xxxxx because it failed to post an incoming call in time.
Any idea what's going on here? Is WhatsApp using any sort of undocumented workaround or exploiting some sort of private API?
This is WhatsApp latest entitlements file:
<?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>com.apple.developer.icloud-container-identifiers</key>
<array>
<string>57T9237FN3.net.whatsapp.WhatsApp</string>
</array>
<key>com.apple.developer.pushkit.unrestricted-voip</key>
<true/>
<key>com.apple.developer.ubiquity-container-identifiers</key>
<array>
<string>57T9237FN3.net.whatsapp.WhatsApp</string>
</array>
<key>application-identifier</key>
<string>UKFA9XBX6K.net.whatsapp.WhatsApp</string>
<key>com.apple.developer.carplay-messaging</key>
<true/>
<key>aps-environment</key>
<string>production</string>
<key>com.apple.developer.icloud-container-environment</key>
<string>Production</string>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:api.whatsapp.com</string>
<string>applinks:v.whatsapp.com</string>
<string>applinks:chat.whatsapp.com</string>
<string>applinks:wa.me</string>
</array>
<key>com.apple.developer.siri</key>
<true/>
<key>com.apple.developer.team-identifier</key>
<string>57T9237FN3</string>
<key>com.apple.developer.icloud-services</key>
<array>
<string>CloudDocuments</string>
<string>CloudKit</string>
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.net.whatsapp.WhatsApp.shared</string>
<string>group.com.facebook.family</string>
<string>group.net.whatsapp.WhatsApp.private</string>
<string>group.net.whatsapp.WhatsAppSMB.shared</string>
<string>group.net.whatsapp.family</string>
</array>
</dict>
</plist>
This specific entitlement seems to be the reason that they are allowed to not report an incoming call:
com.apple.developer.pushkit.unrestricted-voip
I can't find any documentation regarding this entitlement, so I'm pretty sure they have been given a special permission by Apple.
I've asked eurodev support about this and just received:
At this point we don’t have any additional information about the unrestricted entitlement that you are asking about. The only information that’s available is linked here.
https://developer.apple.com/documentation/bundleresources/entitlements
Pushing back to them to get more info.
Thanks.
I have a working Siri payments extension on an iOS app.
But when I ask Siri "what can you do?" It does not list my app.
Siri does list Cash and Venmo payments apps (Venmo on my colleague's phone).
When you tap on the app icon Siri lists some other tutorial example sentences what can users ask Siri using their apps.
I am not able to get my app listed in Siri. Any help, please?
All the mentioned phrases in the below plist work actually with Siri.
My AppIntentVocabulary.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">
<dict>
<key>IntentPhrases</key>
<array>
<dict>
<key>IntentName</key>
<string>INSendPaymentIntent</string>
<key>IntentExamples</key>
<array>
<string>iPay Steve $40</string>
<string>Using iPay send $30 to Steve</string>
<string>Send $50 to Steve using iPay</string>
<string>Send $5 to Steve with iPay</string>
<string>Send $15 to Steve for lunch using iPay</string>
</array>
</dict>
</array>
</dict>
</plist>
I know this is an old question, but there isn't robust documentation about this topic.
The easy way to make work this is uploading the app to iTunes Connect, you can check the documentation from here.
Pay attention to:
When you submit your app to the App Store, your
AppIntentVocabulary.plist file and any localized versions of that file
are sent to Siri for processing.
After upload the build, you have to wait some minutes/hours to see your phrases in Siri "what can you do".
I am not sure if you have solved this issue already.
This is documentation link for IntentPhrases
What helped me:
AppIntentVocabulary.plist should be placed in the target of your app
and not in Siri extension target.
Also, make sure the AppIntentVocabulary.plist is added to the Base localization. Include localized versions of your vocabulary property list file in the language-specific project (.lproj) directories of your app
I am new to HTML5 development and I am building a simple cordova app. In IOS when you click a text and press long press you will see the following options.
Copy
Select All
Define
Share...
Is there a way to translate this words.
I changed the language of the phone but the above options are not translating.
Can anyone help me. Thank you.
You can add other languages to your project adding this on the info.plit (with a plugin or a hook)
<key>CFBundleLocalizations</key>
<array>
<string>es</string>
<string>fr</string>
<string>...</string>
</array>
or if you just support one language, you can just change English here for another language
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
There is an existing plugin to write on the info.plist
https://www.npmjs.com/package/cordova-custom-config
You can use it or use your own plugin that just a config-file tag to add that lines
http://cordova.apache.org/docs/en/latest/plugin_ref/spec.html#config-file
Is there a way to localise the NSLocationWhenInUseUsageDescription in Info.plist in the Xamarin Studio?
Or any possibility to localise the complete Info.plist would be a solution as well.
I tried the following steps as it looks analogue to the
How to localise a string inside the iOS info.plist file? but it does not work for me.
So these are the steps:
In both en.proj and de.proj:
I added an empty file InfoPlist.strings
In Info.plist:
I have set the key of the "NSLocationWhenInUseUsageDescription" to "NSLocationWhenInUseUsageDescriptionMessage".
In InfoPlist.strings:
I added the "NSLocationWhenInUseUsageDescriptionMessage" as key in the strings files and the corresponding transitions in each, but it seems not to work -> the raw string "NSLocationWhenInUseUsageDescriptionMessage" is shown when the user is asked for the permission.
I had similar problem (only I used "Always" instead of "WhenInUse". Here's what worked:
In both en.lproj and de.lproj add the file InfoPlist.strings. Each of the files contains only one line:
"NSLocationAlwaysUsageDescription" = "Your location needed, because...";
In Info.plist, the string doesn't matter anymore, because it will be taken from the InfoPlist.string file. The relevant lines in Info.plist look like this:
<key>NSLocationAlwaysUsageDescription</key>
<string>No text needed here.</string>
Maybe you forgot the semicolon in the strings-files? Or your two folders were named *.proj instead of *.lproj?
We faced a similar issue for the localization of NSLocationWhenInUseUsageDescription. The translation was shown on the iOS simulator but never on real devices. After we fixed our CFBundleLocalizations array from upper case language codes to lower case in the Info.plist the permission description was translated correctly for all languages.
Not correct:
<key>CFBundleLocalizations</key>
<array>
<string>EN</string>
<string>DE</string>
<string>BG</string>
<string>PL</string>
<string>FR</string>
<string>CS</string>
</array>
Correct:
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>de</string>
<string>bg</string>
<string>pl</string>
<string>fr</string>
<string>cs</string>
</array>