iOS Microsoft's FluentUI Themeing - ios

i'm developing a project in multiple platforms, this is, iOS, Android and Web. The team is using Microsoft's FluentUI for components, and it has been easy to implement and mantain in Android and Web, however in IOS the thememing is giving us a lot of issues because it throws a lot of errors. We're trying to change the primary colors and backgrounds of the app so that its inline with the design teams expectations.
While they (Microsoft has a section in the repository about design and themeing) it is very lacking in examples and implementations.
The URLs for the design and themeing:
https://github.com/microsoft/fluentui-apple/wiki/Design-Tokens
https://github.com/microsoft/fluentui-apple/wiki/Overriding-Tokens
I've tried changing the global tokens, and alias. However the colors are not being overwritten. Also in certain tries Xcode says that certain classes and capabilities are not public, therefore they cannot be changed. I've checked the source code and it is not true.
I've tried what they give you as example in the repo:
let globalTokens = GlobalTokens()
let themeColor = ProjectTheme.getCompanyColorTheme()
globalTokens.brandColors[.primary] = DynamicColor(light: themeColor?.colorValue?.hexValue, dark: themeColor?.colorValue?.hexValue)
let fluentTheme = FluentTheme()
fluentTheme.tokens(for: globalTokens)
self.view.fluentTheme = fluentTheme

Related

Resx in Blazor WASM: What is "the issue" with the old static way of using the Resx Files?

[Disclaimer: I'm a long-time Desktop developer slowly learning Web and Blazor, so might be a noob question] but,
How come, when you try to find best-practice for doing Localization in Blazor you are told from official MS Docs (https://learn.microsoft.com/en-us/aspnet/core/blazor/globalization-localization?view=aspnetcore-5.0&pivots=webassembly) and various blogs to do the following:
Add NuGet Package: Microsoft.Extensions.Localization
Register localization "builder.Services.AddLocalization();"
Add your resx Files
Make IStringLocalizer (#inject IStringLocalizer Loc)
And finally use the following in your razor pages: #Loc["Greeting"]
Sure above works, but to a Desktop developer, this feels like a massive step-back in quality and "refactor-safeness" and the new way to use "magic strings" to reference the translations.
I've tested, and the "old way" on a Blazor Page of just:
Adding a MyResource.resx
Let it use the custom tool "PublicResXFileCodeGenerator" to make the .designer file
Simply reference the translation using MyResource.MyTranslationKey;
It works, it is refactor-safe, no need for an injection or NuGet packages... It just works, but despite that, it is not the recommended way... My question is why not? What is the drawback (all the blog and documentation fail to say why the new way is better)
I think there are a number of disadvantages using PublicResXFileCodeGenerator, which may have led to the current recommendations on how to support i18n-capabilities in [blazor-]apps.
Note that this is just a list of reasons I personally came up with finding possible causes which may have led to the current recommendations:
A: Visual Studio exclusivness
The way how PublicResXFileCodeGenerator generates files seem to be VisualStudio exclusive. Today´s teams tend to use a variety of IDEs / editor to build software, (f.e. VS, VSCode, Rider, WebStorm, etc.).
At least from my perception over the last couple of years
using IStringLocalizer works for all editors, even notepad or vim.
B: no default fallback
With the recommended way of accessing a translation, there will always be a useful fallback which is provided in markup. That is not the case when using the generated types to access translation-units.
C: no builtin-support for interpolation
Using IStringLocalizer, there is a built-in, lightweight and formalized way for utilizing interpolated strings. It even encourages using such strings in favor of manually building together such values, which is considered bad-practice when translating software.
DO:
#inject IStringLocalizer<DemoPage> L
<h1>#L["Greetings, {0}", userName]</h1> <!--Greetings, Arthur-->
#code {
string userName = "Arthur";
}
DON´T:
<h1>#DemoPageRessources.Greeting #userName</h1> <!--Greetings Arthur-->
#code {
string userName = "Arthur";
}
this dictates the order of strings, which might be OK for one language, but not for another. Achieving this with the generated type is a bit more verbose, and even may lead to runtime-exceptions, when there is no actual translation, i guess.

What is the difference between a unity plugin and a dll file?

i am new to Unity and i am try to understand plugins. I have got the difference between a managed plugin and a native plugin, but what is not very clear to me is:
what is the difference between a plugin and a dll? what should i expect to find in an sdk to make it usable in my unity project?
Thanks a lot
To expand on #Everts comment instead of just copying it into an answer, I'll go a little into details here
What is a plugin?
It's a somewhat vague word for a third-party library that is somehow integrated with the rest of your game. It means that it neither is officialy supported by Unity, nor is it a part of your core code. It can be "plugged" in or out without altering its internals, so it must provide some kind of API that can be used by the game code.
For example, you'll find many plugins that handle external services like ads, notifications, analytics etc. You'll also find a couple of developer-tools that can also be called plugins, like tile-based map editors and such.
Plugins come in many forms - DLL files are one example but some plugins actually provide full source code for easier use. And of course, other plugins will provide native code for different platforms, like Objective-C for iOS or .jars for Android.
So to answer your first question:
DLL is simply a pre-compiled source file that can be a part of a plugin
A plugin is a whole library that can consist of multiple files with different formats (.cs, .dll, .jar, .m etc)
What do you need to use an sdk?
First of all - documentation. Like I said before, and like you noticed yourself, not all plugins give you access to the source code. And unfortunately, not many sdks have extensive and developer-friendly documentations so it can be a tough task to actually understand how to use a given sdk.
Secondly - the code. Many sdks give you some kind of "drag & drop" library, a single folder with all the neccessary files inside that you simply add to your Unity projects. I've also seen sdks that use Unity packages that you have to import via Assets > Import Package > Custom Package.
Once you have the code and documentation it's time to integrate it with your game. I strongly recommend using an abstract lyer in your game as, in my experience, you often have to change sdks for various reasons and you don't want to rewrite your game logic every time. So I suggest encapsulating sdk-related code in a single class so that you have to change only one class in your code when switching from, say, one ad provider to another (and keep the old class in case you need to switch back).
So you basically need three things:
Documentation (either a readme file or an online documentation)
The code (precompiled or source)
A versatile integration

React-Native Select List Overley

If I have a component/container form that allows a user to select a group, I am not hip to what the component/ux should be for this, but I would imagine a select list overlay type deal, am I wrong in assuming this? Why is this not available in the react-native core? The picker for android offers this, but it seems like the iOS version is just the slot machine style picker. Am I missing something?
Is the Picker only the slot machine on iOS or is there a way without bringing in a third party component to provide this functionality for both iOS and Android?
I assume you understand that React Native is not hybrid application like phone-gap. React Native actually pulls out the native controls off of operating system. That is why, you are seeing slot-machine like picker in iOS and material-style picker in Android.
What you need to grok is that React Native is not meant to build cross-platform applications with "same" codebase. The codebase will change a little bit depending upon the OS.
You'll want to keep your business logic separate from the UI components or views, so that you can reuse the business logic in Android and iOS. UI components will differ for obvious reasons. For eg. You will not need Android Toolbar in iOS application, because there is no such thing as toolbar available natively in iOS. Similarly you will not find NavigationBarIOS in Android.
Bottom line- keep your UI components separately in a "components" folder. You can pull out desired components from "components" folders depending upon the OS.
For reference, please go through this. This is my example project back from the days when I was learning react-native. So do expect it to be very amateur-level code. Repo. You can see how I have kept things separately. Good luck!

Creating Xcode Scheme Progmatically

I am trying to automate the creation and deployment of an iOS application through the use of scripts. The application requires several different schemes to support different variations of the app. I would like to automate the process of creating a new scheme (preferably in Python), but I cannot figure out how to do this other than in Xcode.
I would like to offer some methods which I have already tried, but research has not offered many leads. Does anyone know if this is even possible?

How to use the new Code Manager in the new Omniture Interface

I am confused within the new Omniture Interface for a small thing. I am trying to Generate SiteCatalyst JavaScript Code for my site.
Here is what I did.
Created Report Suites from Report Suite Manager.
and got confused how to generate code for my site.
See the old interface made it very clear to create code for my site by selecting a Report Suite as explained here.
But how to generate code by selecting a Report Suite in the new interface?
Thanks.
I don't know where the code generation is or if it even exists any longer. Have you considered using the tag manager?
It's in the Admin home under "Tag Management". You can download the site snippet from there. You will see all the code in your container at that point. You have to set variables a little differently when you use the tag manager at that point but there is plenty of documentation around it.
Code Manager
Code manager lets you download data collection code for web and mobile platforms.
Admin tools > Code Manager.
After you download the library, you must configure the code to send data to the correct tracking server and report suite.
Tag Manager
TagManager is the standard method for deployment of Adobe Marketing Cloud tags.Tag Manager 2.0 is the latest one available.
TagManager lets you:
Deploy Marketing Cloud products and Genesis integrations though a single hosted JavaScript file.
Manage tags and configuration in a secure administrative interface.
Test changes and quickly roll back to previous versions.
Use existing SiteCatalyst tags to implement TagManager without a complex deployment process.
Deploy third-party tags.
Dynamic Tag Manager
Adobe acquire Satellite and it is now DTM.It is the future of implementation.
Visit the link DTM
The old Code Manager is still there, just a bit hidden. If you go into the interface for Code Manager, just under that table is this text. It brings you to the old Code Manager:
To view the legacy code manager or download AppMeasurement libraries for BlackBerry, Windows Phone 7, or Symbian click here.
In future the world is expected to go with Tag Management and when you have time it is recommended that you implement that.
Thanks C.

Resources