Code Monkey home page Code Monkey logo

ios-sdk's Introduction

Phrase Over the Air (OTA) SDK for iOS

Publish your translations faster and simpler than ever before. Stop waiting for the next deployment and start publishing all your translations in real-time directly in Phrase Strings.

Instructions

Head over to the Phrase Help Center to learn about this feature and how to use it in your apps: https://support.phrase.com/hc/en-us/articles/5804059067804

ios-sdk's People

Contributors

carstenapploft avatar docstun avatar forelabs avatar niorko avatar thesoenke avatar winkelsdorf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ios-sdk's Issues

Phrase seems to be using incorrect locale

We are trying to localise our app for the German and Swiss market and have noticed a behaviour that seems incorrect to us:

When the user has selected Germany as their country, but Swiss German as their preferred language in settings, we would expect the app to update the Swiss German de-CH translation.
In reality it is trying to download the German translation de-DE.

This seems incorrect, since the user's preference is Swiss German, not German. I assume that you are using Locale.current instead of Bundle.main.preferredLanguages to figure out the users language preference?

We know we can override the locale that's being used, but were still wondering if this behaviour was intentional or rather a bug.

Phrase OTA on iOS native project, with KMP moko library

We are trying to integrate a Phrase localization service in our KMP project, which is targeting Android and iOS clients. We have managed to do that without a problem so far. We are using the moko-resources library for having shared resources within the shared module of the project and then we are using native-specific code for the setup of Phrase on iOS and Android native projects like it is done when one is using Phrase directly for Android or iOS clients.

Problems for us started when we tried to enable ourselves Over-the-air capability for the iOS project. For Android, this part works without a problem, but on the iOS side, we have problems getting the latest updated strings from the OTA feature visible in the app.

With our moko library, we are using this part in SwiftUI to get the string from resources:
MR.strings().button_label_login.desc.localized()

With this code, we get locally saved text for that phrase key, but when we do some OTA updates for it we don't get the new text from it.

From our investigation, we found out that the problem lies in different bundles being created with the KMP project. There is a bundle of an iOS native project that stores OTA strings from the Phrase, and there is a bundle from Shared code, where we have our shared resources provided for Android and iOS clients. Direct MR.strings() call is using bundle from Shared code.
When we are doing phrase pull that is using the Android way of creating XML files for the moko-resources library, those texts get updated for iOS directly in the build folder of the KMP project under this path:

project-name/shared/build/bin/iosSimulatorArm64/debugFramework/Shared.framework/ProjectName:shared.bundle/Contents/Resources/Base.lproj/Localizable.strings

But your library for Phrase OTA for iOS is adding those strings to the iOS native project bundle.

KMP is getting more and more popular and it would be great if you could either update your existing article on this topic with an explanation of how to integrate the OTA feature with the KMP project or prepare some other documentation for it.

If there is something we are missing with our setup let us know what we need to change to make our OTA integration work in our project.

New strings values are not available on updateTranslation completion handler

New strings values are not available on updateTranslation completion handler

On PhraseSDK 4.0.1 (spm install) when calling Phrase.shared.updateTranslation or Phrase.shared.updateTranslation(for:), the strings that have been synchronised can't be retrieve in the completion handler.

Scenario (run on simulator iOS 16.1 - OTA release are in development status):

  • The app is already installed and have sync with an OTA release A.
  • I make changes and create an OTA release B.
  • I launch the app.

I use an HTTP proxy that confirm the sync is done with new strings value.
I start the sync before func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) end.
=> I expect to use the new value in the completion handler as the documentation is telling it (may be it is a regression).

I use the following to retrieve the strings value :

  • Phrase.shared.localizedString(forKey: , table: )
  • Phrase.shared.localizedString(forKey: , table: nil)
  • Phrase.shared.localizedString(forKey: , table: "Localizable")
  • NSLocalizedString(, tableName: , bundle: Bundle.main, comment: "")
  • NSLocalizedString(, tableName: nil, bundle: Bundle.main, comment: "")
  • NSLocalizedString(, tableName: "Localizable", bundle: Bundle.main, comment: "")

None of these give the right value.
BUT on the next launch, the string values are the last synchronised values.

Swizzling not working

I'm using the Phrase OTA SDK in my Swift app, and it appears that the swizzling is not working. NSLocalizedString() does not give me the updated translations, Phrase.shared.localizedString(forKey:) does however (I did not turn off swizzling). I'm using the latest SDK (2.1.0) with Xcode 11.4.1 and Swift 5.2.2.

Add swizzling support for NSLocalizedString function invocation with bundle parameter.

As modular architecture in mobile development becomes more popular, there is a need of supporting OTA updates of Localizable resources stored in different Bundles. Current PhraseSDK assumes that every module uses the resources stored in the main Application Bundle thus swizzling the NSLocalizedString method invocations that don't pass the bundle parameter only.

In the mentioned architecture the App is divided into functional modules horizontally and vertically. Vertical division could be realised in a way that every flow of the app is developed as a separate framework containing all the required resources for it's operation. With that assumption it is reasonable that each module has the Localizable.strings file containing all the translations used in that particular module. If we take as an example a bank application, the money transfer flow might end up in a different module than the history screen. Each module uses the resources that are stored in that module or in some cases a shared module that is reused by a subset of the modules. A further description of such architecture can be found here: modular architecture iOS.

1*saKX3Dssawi-Z4zT0mNRmQ

To fully support Phrase OTA updates for applications following that architecture an iOS SDK is needed that would allow the user to point to the Bundle that is used for the strings files storage on initialisation. Each module could then have it's own instance of the PhraseSDK and synchronise with a separate project while still using the native NSLocalizedString calls passing the corresponding bundle parameter.

Fallback localization should consider language component before defaulting

We are trying to localise our app for the German and Swiss market and have noticed a behaviour that could be improved:

We already have a German translation "de" and have recently added "de-CH". In an ideal world (TM) we wouldn't need to duplicate all translations in the sub-localisation. Instead we should be able to only include those that we want to explicitly override.

Your SDK already handles the case of missing translations by defaulting to the default language, which is English in our case. However, it would be nicer if it would look for the translation for the primary language code "de" first before defaulting to the default language.

I also noticed that you are only updating the file for the current locale (or its override) but you are not updating the fallback.

Misleading Package Reference Name

/* XCRemoteSwiftPackageReference "ios-sdk" */,

We have noticed that the Phrase SDK for iOS is named ios-sdk in the XCRemoteSwiftPackageReference, this could potentially lead to package conflicts if another framework uses the same name for their SDK.

It's a minor thing, but I suggest changing the reference name to reduce risk of conflicts :)

More information in PhraseAppTranslationResult.error

Hi! I'm using the latest version 1.0.0 with Swift 5.0.1

It would be really nice to have some more information in the enum. Similar thing as success contains an "updated" value, it would be really helpful to provide an associated value in case of error (without throw)

I guess maybe PhraseAppError type so you have more control?

public enum PhraseAppTranslationResult {
    case success(Bool)
    case failure(PhraseAppError)
}

The 'why' is because I'm getting a PhraseApp.NetworkError.statusError if I enable verbose mode, but I can't figure out what's really failing, because I have data connection for sure.

Thanks a lot for your software and time :)

Better support for using PhraseSDK in extension (remove warning)

Hi!

Right now it's possible to link against PhraseSDK from an extension, but you'll get the warning:
ld: warning: linking against a dylib which is not safe for use in application extensions: .../PhraseSDK.framework/PhraseSDK

I guess we're not unique in our desire for using OTA updates in extensions, and I hope that there's something you can do about it.
In the best case it should just be to flick on APPLICATION_EXTENSION_API_ONLY = YES; in your build settings, but I realise that you might actually be using API:s that's not available in extensions.

Min/Max version constraints behaviour

Hi, I am running into something that might be expected behavior but I was expecting something different and I can not see any explicit comment about this in the doc. How is the min/max version range supposed to work?

What I expected

Min/Max to be applied not only on downloading but also in future uses. So, if for example I am in app version 3.1.0, and there is an OTA for [3.0.0 - 3.2.0], then I expect OTA to download and use that file. However, when the user updates the app (without deleting) to 3.3.0, I was expecting the OTA to no longer apply and therefore serve strings from the app bundle rather than the outdated OTA file.

What I see happening

Min/Max is applied on download, so it only gets a new OTA file if the app version matches the range. However, once the OTA is downloaded, it seems to be used every time from now on, even if the app upgraded to a version that is no longer under the OTA range.

What is the problem?

The main issue I see with this behavior is that the translations are no longer consistent. So, if I update strings, users that downloaded some old OTA content are now seeing the old strings even if they have the app updated with newer texts, while new users downloading the app today see something newer (coming from the binary)

Can anyone confirm this is indeed how it works and this is intended and not a bug? and, if intended, is there anything we can do to restrict OTA to the range on runtime? Maybe a way to delete previously downloaded OTAs on app update?

Thanks!

Performance impact with OTA

Hi, I am debugging some slowness in a collection view we have with several strings on it, refreshed very frequently.

For my surprise, more than 80% of the time is spent into the PhraseSDK. Attached screenshot focused on the NSLocalizedString subtree.

As you can see, I do not have the code to check the exact method invocations, but it seems that the code is doing some stuff with NSFileManager as well as with Url consuming 30% of total time, and some calls to Locale.availableIdentifiers with other 14% and 12%, so making up more than half the total time.

I understand there is need for some work to be done inside the SDK, but is it possible you cache some of this info internally so you do not have to make it every single time? the most interesting aspect of this particular example is that the key passed into the NSLocalizedString is most of the times identical, so if you would use a cache we could just hit the cache most of the times, resulting in much faster performance.

Can anyone take a look to possible optimizations? when repeated multiple times it makes a huge difference to use or not your SDK.

Screenshot 2021-06-10 at 15 27 23

Code signing fail when adding as sub-dependency

What is it:

  • PhraseSDK makes app crash on runtime(app start) when it's added as a dependency of a framework.
  • Integration is being done through Swift Package Manager (directly on Xcode)
  • Issue happens only when running on devices (simulator works fine)

Crash Log

dyld: Library not loaded: @rpath/PhraseSDK.framework/PhraseSDK
  Referenced from: /private/var/containers/Bundle/Application/289B155F-C0DE-4031-9600-D2CF0224F887/PhraseTestApp.app/Frameworks/PhraseTestFramework.framework/PhraseTestFramework
  Reason: no suitable image found.  Did find:
	/private/var/containers/Bundle/Application/289B155F-C0DE-4031-9600-D2CF0224F887/PhraseTestApp.app/Frameworks/PhraseTestFramework.framework/Frameworks/PhraseSDK.framework/PhraseSDK: 
code signature in (/private/var/containers/Bundle/Application/289B155F-C0DE-4031-9600-D2CF0224F887/PhraseTestApp.app/Frameworks/PhraseTestFramework.framework/Frameworks/PhraseSDK.framework/PhraseSDK) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.
dyld: launch, loading dependent libraries
DYLD_LIBRARY_PATH=/usr/lib/system/introspection
DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib

Context

My company recently decided to integrate phrase's OTA SDK, and now I'm facing an issue a bit specific to our setup. Our project is modular, and all our external dependencies are added on an internal framework of ours, which is then linked to the main app target.

All other SPM packages are working totally fine on this setup. I'm not versed on Apple's code signing, but those other packages are regular open source projects, I guess the main difference here's that Phrase is using SPM to distribute the already compiled binary of the framework.

To highlight again, the issue only happens if Phrase is added through SPM in the internal framework - when adding to the main target directly it works fine.

Any feedback or suggestions are welcomed.

I created a sample workspace (app + framework + phrase added on framework) that reproduces the issue, you just have to run it on a real device.

PhraseTestApp.zip

Provide DSYM files for xcframework

Hi,
I am getting some crashes from one of my dependencies that is not symbolicated since we do not have the DSYM files of them. Symbols from code we have access to are uploaded, so it can only be from one of the 3 options xcframeworks included in my app, one being phrase (unfortunatelly I do not know if the crash is from this lib or some of the other 2). Could you provide the DSYM files for each release you made together with the binary? it is quite a pain to have to upload this manually, but at least I will have visibility over crashes happening in your lib

Thanks!

Add Privacy Manifest file to library if needed

Hello,

I am a current user of your ios SDK. I have a question about the Privacy Manifest.

At WWDC23 Apple is requiring all api calls that fall under this ruleset

https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api

be added to a privacy manifest file.
Does Phrase's iOS SDK need to include this manifest?
Please let me know about your upcoming plans to apply the privacy manifest.

Thank you!!!

Planning for OTA SwiftUI support?

Hi! I would like to ask it there any planning to support SwiftUI? Currently I have a workaround like this:

    let text: LocalizedStringKey?
    let string: String?

   @ViewBuilder
     private var sharedText: some View {
         if let text = text {
             Text(text)
         } else if let string = string {
             Text(string)
         } else {
             Text("")
         }
     }

But my App have hundreds of Texts and Buttons to change and it is not practical.

Latencies after switching from 4.0.1 to 4.1.0

Hello,

We noticed high latencies on our app after switching from the SDK version 4.0.1 to 4.1.0. Everything became very laggy everywhere on the app.
After downgrading back to 4.0.1, latencies disappear and everything works as before.
Has someone noticed any similar issues?

Regards,
César

Translations from other tables are lost

Once a sync has been done, the tableName parameter do not work anymore.
NSLocalizedString(<key>, tableName: <tableName>, comment: "")

My project work with multiple tables : A and B, that are 2 distinct projects on Phrase.
i use OTA to sync A (since OTA can only sync one project)
Once a sync has been done :

  • NSLocalizedString(<key>, tableName: A, comment: "") : nok
  • NSLocalizedString(<key>, tableName: B, comment: "") : nok, all translations from B are lost !!
  • NSLocalizedString(<key>, tableName: nil, comment: "") : ok, it gives sync translations from project A

You need to store the sync data mapped to a tableName (project name is a good candidate), and check it correctly in your swizzling. Or add tableName parameter in updateTranslation func, default nil, so no pb upgrading the sdk.
Thank's

tableName parameter is ignored, Phrase always returns from Localizable

Simplified description of the situation: In our app there are several translation tables. One general table (Localizable) and one with tenant-specific content (Localizable-Tenant).

Without phrase (or more precisely before calling setup) we can get localizations from the different tables by specifying the tableName in NSLocalizedString(...).
After calling setup, the current version of Phrase (4.0.1) seems to ignore the tableName and always return localizations from the main table (Localizable), which may not exist.

In our case, this is even more critical because we have the following logic:
If there is a value for a key in the tenant-specific table take this value, otherwise, take the value from the general table. With 4.0.1, the tenant-specific table is completely ignored.

As a solution, we may could disable Swizzling, but that would introduce more complexity to the code. Thus, we are now back to version 3.0.1 where everything works as expected.

Cocoapods Simulator Issue: Use of undeclared identifier 'Phrase'

I'm integrating the PhraseSDK for OTA updates based on these instructions. This is a mixed Objective-C/Swift project with our AppDelegate in Objective-C. I was able to add the Cocoapod (pod 'PhraseSDK', '~> 3.0.1') and build to a device (iPhone SE 2, Intel Mac) without issue. When I attempt to run the same code in a simulator the build fails with Use of undeclared identifier 'Phrase' where I first reference it, calling [[Phrase shared] setDebugMode:true].

I'm using PhraseSDK 3.0.1 and Cocoapods 1.10.1 which should support xcframework. My understanding of #26 is that I should not need to do anything else. Is there something I'm missing?

Swift 5.1.2 support

It doesn't work when I updated to latest xcode.

Module compiled with Swift 5.1 cannot be imported by the Swift 5.1.2 compiler: Pods/PhraseApp/PhraseApp.framework/Modules/PhraseApp.swiftmodule/x86_64-apple-ios-simulator.swiftmodule

Use only configured app supported languages in OTA

We have seen that there are unsupported languages shown in the app that were not expected.

The problem seems to be coming from OTA. When you have a new language created in Phrase, and you create an OTA, all devices are downloading all existing languages in Phrase and not only those listed in the supported languages of the app.

So, basically, if I run this:

Bundle.main.localizations

I get this list:

  - 0 : "en"
  - 1 : "es"
  - 2 : "it"
  - 3 : "sv"
  - 4 : "Base"
  - 5 : "fi"
  - 6 : "pt"
  - 7 : "ca"

But, since we have declared FR as a language in Phrase (not yet ready for production) and created an OTA, my french users are seeing a partially translated french version of the app.

Expected: To only do OTA of languages supported by the app.

Support manual app version entry

Hello,

I saw that on Android the SDK supports a custom app version number ( Phrase.setAppVersion("3.2.4");), our app currently doesn't have a semantic version format ( we have something like 8304 ).
We do have a computed variable which returns the semantic formatted string.

Is it something that can/planned to get done on the iOS SDK ?

Thanks.

[Binary upload error] Multiple binaries with same code sign path

Hello Phrase team,

We have been using Phrase on our main iOS app and recently we included Phrase into our macOS Catalyst project as well - the Phrase sdk was added into the macOS project via SPM. In our internal tests, no issues have been raised, all works perfectly.

But today when trying to upload a new build to App Store, we caught a new issue due to multiple binaries being signed using the same sign path. We really appreciate if you have any ideas on a workaround or a fix for this error.
We tried also adding the sdk manually as per your documentation, but it says that we need to use a XCFramework instead of simple .framework library type.

Below is a screenshot of the error, after integration with SPM and tried to upload a build for macOS (Catalyst):

photo_2021-11-09_21-06-14

Malformed Archive Error and SPM Compatibility Issue

While attempting to utilize this SDK via SPM, I faced the following error:

error: archive at path '/Users/core/.jenkins/workspace/iOS/build/InHouse/Galaxy.xcarchive' is malformed

Upon inspecting the contents of the 'xcarchive' folder, I discovered that there was no 'info.plist' file present.

Screenshot 2023-09-13 at 13 09 56

Later, according the my search I found that in some cases BCSymbolMaps and dSYMs caused this error. I installed the xcframework and deleted those files, it worked successfully

screenshot_2023-09-11_at_15 15 41_720

However, now we can't use SPM. Could you publish a new release without these files?

source: https://stackoverflow.com/a/68780570

unchecked "use default language as locale" setting in OTA doesn't work

Preconditions:

  • create OTA distribution with use default language as locale unchecked
  • have 2 locales in the app (e.g A and B)
  • have only locale A in the Phrase
  • have locale override setting enabled during Phrase setup because I have in-app language switcher
  • Switch to language B
    Expected result:
  • app switches to local localisable string from language B ( I tried with swizzling enabled and not)
    Actual Result:
  • I can see in the app bundle that phrase downloads b.lproj file where translation contains strings from A language

Xcode 14 preview error

Hi! when I open my project with Xcode 14, I got this error:

SettingsError: noExecutablePath(<IDESwiftPackageStaticLibraryProductBuildable:ObjectIdentifier(0x0000600014eebb40):'PhraseSDK'>)

Reopen with Xcode 13 works fine.

Can we get a new "Example App"

The current demo app is 6 years old and I noticed that Android has an example app that is regularly updated https://github.com/phrase/android-sdk-example. It would be nice to have a new one for iOS.

I have tried to implement Phrase SDK with OTA. But I am doing something wrong and it is not working. I have already contacted support about it.

Just want to make sure that the Phrase SDK integration is correct from my side and it is something else.

Compile with Xcode 12 Apple Swift version 5.3

I'm getting an error while trying to compile my project.

Failed to build module 'PhraseSDK' from its module interface; the compiler that produced it, 'Apple Swift version 5.2.4 (swiftlang-1103.0.32.9 clang-1103.0.32.53)', may have used features that aren't supported by this compiler, 'Apple Swift version 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1)'

Uses default language even though the list of preferred languages contains a valid language (that is not the default language)

Hello Phrase!

Summary:
If the first item in the list of preferred languages is not supported by the app (or Phrase) it seems like Phrase OTA defaults to the default language even though the list contains languages that are supported (but is not the default language).

Example:
This example is taken from our app and please let me know if I have misunderstood something about the setup.

This is our configuration for our iOS project, i.e we support two languages "en-US" and "sv" where "en-US" is the default one.
Skärmavbild 2021-01-20 kl  12 56 37
And the same goes for our Xcode project
Skärmavbild 2021-01-20 kl  12 58 24
We have also configured the OTA configuration to fallback to language without region if necessary.
Skärmavbild 2021-01-20 kl  12 59 13

This works perfectly fine if you have any of our two supported languages as the first supported language (here is an example where Swedish "sv-SE" is the preferred language and Norwegian is the secondary language). All strings coming from Phrase OTA is in Swedish.
IMG_0045

But if you change the order in the example above (having Norwegian as first preferred language and Swedish as secondary) all strings coming from Phrase OTA are in English (default language).
IMG_0041

This is not aligned with the Apple's documentation on how this is handled in iOS (see this entry: https://developer.apple.com/library/archive/qa/qa1828/_index.html#//apple_ref/doc/uid/DTS40014938)
and it doesn't follow how the native UI components works.

This is an example from our app (when the user as Norwegian as first language and Swedish as second) where we use the native ASAuthorizationAppleIDButton for Apple sign in but custom UIButtons with localised string from Phrase OTA for the other two buttons.
The Apple button is handling the secondary language (Swedish that is) correctly but the translations from Phrase OTA gives us the default language English.

IMG_0047

To me it looks like that Phrase OTA only looks for the first preferred language and don't take the other languages into account at all.
Or have we missed anything in the configuration of our projects?

Thanks for your help!

Preferred language is ignored

Hello Phrase,

Could you please help us to investigate an issue. So in ou project we have 4 languages: de(default), en, it and fr
The language of iphone is russian. I also chose English as prefered language of the app
IMG_DB9E5C9BE053-1

however when I open the app everything is in german... is it intended?

PhraseSDKMainBundleProxyDisabled is false
and I also call Phrase.shared.updateTranslations method

Thank you

Hardcoded path in latest release 3.0

I noticed an error while debugging our app with the latest Phrase SDK 3.0.
There's an hardcoded path in the latest framework @winkelsdorf

error: virtual filesystem overlay file 
'/Users/winkelsdorf/Library/Developer/Xcode/DerivedData/PhraseSDKdbgypdflrqbfdrdzewelqaanicsg/
 Build/Intermediates.noindex/ArchiveIntermediates/PhraseSDK/IntermediateBuildFilesPath/
 PhraseSDK.build/Release-iphoneos/PhraseSDK.build/all-product-headers.yaml' not found

Two languages being returned when using "localeOverride"

Short summary of our setup:

  • We want to have an in-app language picker
  • We are using R.swift for strong typed resources

To reproduce the issue, I have to:

  1. Set language in iOS Settings -> Our app to anything other than "English"
  2. Set in-app language (localeOverride) to "en"
    Result is: most of the strings are in english, but some of them will use the language in iOS Settings instead of the localeOverride.

I am properly settings the localeOverride and updating the translations using updateTranslations and then reloading the UI, but i cannot get it to work.

A suggestion i got from Phrase support was to use
NSLocalizedString("", comment: "") instead of
NSLocalizedString("", bundle: hostingBundle, comment: "")

but unfortunately this would not be a solution for us as we cannot and would not like to change the Rswift code.

Even so, I did a test using a breakpoint and using the method without the bundle would still return the translation in the wrong language, so i believe it would actually not solve the issue? I attached a screenshot.

Screenshot 2022-04-28 at 16 33 47

We really want to release our in-app language picker to synchronize the language with the other platforms and our backend, but this issue is really blocking us! We have been on with support for like a month now with no solution. Please let me know if this is a known issue or if you need more details.

Configure OTA with two different distributions

Hi, I would like to update strings that live in two different projects. However, distributions only accept one project. If this is not possible, can I configure the project twice in the app using different distributions?

thanks!

e.g.

// 1st distribution 
Phrase.shared.setup(distributionID: "xx",
                        environmentSecret: "xx")
                        
 Phrase.shared.updateTranslation()
 
 and immediately
 
 // 2nd distribution 
Phrase.shared.setup(distributionID: "yy",
                        environmentSecret: "yy")
                        
 Phrase.shared.updateTranslation()

Error building with PhraseSDK for the iOS simulator on an M1 Mac

Hello,

I'm trying to build our project on a brand new M1 MacBook Pro, but I get this error:

Failed to build module 'PhraseSDK' from its module interface; the compiler that produced it, 'Apple Swift version 5.2.4 (swiftlang-1103.0.32.9 clang-1103.0.32.53)', may have used features that aren't supported by this compiler, 'Apple Swift version 5.3.1 (swiftlang-1200.0.41 clang-1200.0.32.8)'

I'm using Xcode Version 12.2 (12B45b) on macOS BigSur 11.1

This is a major blocker for us. Do you have any workarounds for this? Any updates on distributing PhraseSDK as a XCFramework?

Miguel Cabeça

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.