Boss wants to change our iOS game icon. Changing icon requires a new build. A new build requires iPhone X support. iPhone X build target requires Xcode 9. Xcode 9 requires macOS 10.12. OS update breaks old Unity3D. Upgrading Unity breaks build.
https://twitter.com/aaefiikmnnnr/status/931222777301835782?s...
Systems improve over time. Apple's privacy in iOS improved a lot. Not updating your apps makes it hard to keep up with API changes. Its normal you have todo some work to ensure it still works. Sometimes you're out of luck. But not all dependencies stay with us forever. Software is sadly enough not immutable, environment impacts how software runs... My old android game stopped working on newer devices 3 years ago due to a OpenGL bug that was fixed, i depended on the bug in order to make my app work.
Welcome to the real world
Software is not free once written. You need to expend resources to keep it up to date and secure.
If you aren't keeping things up to date, you are neglecting the maintenance of your application. You wouldn't be surprised if your car stopped working if you never change the oil. Apple is taking proactive actions here, presumably to protect the end user experience. Wether or not I agree with the manner of proactive action is a different issue. We know apple loves to exert tons of control over things like this.
Apple is difficult to work with. It takes maintenance to keep apps up to date. Yes, the two year thing seems a bit over the top but remember the real issue is that this guy can't submit a new build because he hasn't added support for the last two OS versions.
The app store is hard to work with, but they payoff is immense also.
Welcome to the real world.
That being said, I also think your frustrated and typed word salad into the reply box.
I'm not apple. I don't like apple's practices. I don't own any apple devices (beyond what's required to support an iOS app) because I take an issue with the same things you do.
The reality is, if you want to support apple devices, you have to play their game, and that means updating your apps regularly. Sorry if you don't like it. I don't either.
Again, welcome to the real world.
Network connectivity has brought along with it a certain level of toxicity around updates and maintenance and such. At the very least Apple could be shipping older runtimes, downloaded on demand similar to Steam Proton runtimes.
The more reasoned part of me says that you're totally wrong and you can boot up Windows and run software from two decades ago and the only real issue will be high dpi support which can be worked around.
There's nothing actually necessary about what Apple is doing in the least. They could even take a soft approach and simply slap a "vintage" tag on old unpatched software and call it a day. There is something profoundly stupid about automatically banning any software more than 2 years old from all Apple devices without even giving users the choice to use that old software. I'm not even saying it's morally wrong, or it's bad for consumers, I'm saying it an incredibly dumb decision. There is SO MUCH niche software out there designed for a tiny audience which nobody will ever be able to afford regularly updating so long as it's still basically working. Trying to maintain this ideal where only well patched up to date software appears on the app store is just dumb.
> We’ve updated the App Store Review Guidelines to provide criteria for when apps are required to use Sign in with Apple. Starting today, new apps submitted to the App Store must follow these guidelines. Existing apps and app updates must follow them by April 2020. We’ve also provided new guidelines for using Sign in with Apple on the web and other platforms.
> 4.8 Sign in with Apple Apps that use a third-party or social login service (such as Facebook Login, Google Sign-In, Sign in with Twitter, Sign In with LinkedIn, Login with Amazon, or WeChat Login) to set up or authenticate the user’s primary account with the app must also offer Sign in with Apple as an equivalent option.
- Native Sign in with Apple button not working in Unity
- Official Sign in with Apple plugin provided by Unity also not working
- Hooked up API with help from GitHub and created Sign in with Apple button by myself ended up getting `4.0 Design` rejection without explanation
- Trying crazily to contact Apple reviewer for weeks only to find out you have to use system font on that button
- Unity cannot support new Thai system font after iOS 13 and they mark it won’t fix
- Ended up building a native sample app and screenshot Sign in with Apple button from it in 12 different languages into PNGs and ask the my designer co-worker to remove background for me to import them into Unity
- After all these the update is finally accepted by App Store
- Casually downloaded games by other companies a week later, saw a totally malformed Sign in with Apple button not being nitpicked by reviewer and just went live like thatI always wondered why so many apps support it because it seems like they'd prefer to know your real email, but now it makes sense.
Whereas Microsoft has been basically stuck on x86.
And Microsoft fully supports running x86 applications on ARM Windows[1], as well.
[1] https://docs.microsoft.com/en-us/windows/uwp/porting/apps-on...
Put another way, the raspberry pi runs all but two of the games I played in that era. I can think of 6 iOS games that no longer run, and I played at least 10x as many games on DOS as iOS.
My experience with productivity software has been similar.
Totally, but that’s not what I’m talking about. We did the move from OpenGL to Metal, for example. It was tough, but it is a huge improvement and we were glad to do it to avoid code rot. I’m talking about how something that we wrote and compiled with the last fully updated IDE a few months ago suddenly stops working in the next release and requires tweaking. This isn’t 20 year old code that we haven’t touched. It’s 20 year old code we’ve been religiously updating the entire time.
Windows software still runs 20 years after in compatibility mode
The only reason WINE works is because of a massive community effort to reimplement those bugs that Windows is forced to keep.
They at least change over time. Not all of them improve.
They do, but Apple intentionally harms older systems.
(I'd argue there's more room for this in non-game software as well, but certainly for games...)
Throw something like Unity in the mix and now you have even more things to keep up to date.
You can say well that is just nonsense. My app is finished. But is it really? what if you actually need to do a critical bug fix. Or something to be compatible with new hardware?
There is no simple answer here. But one thing I’ve learned is that staying as “standard” as possible is a huge huge advantage. Apples upward path is mostly manageable.
I'm still on Mojave because I'd have to say bye bye to Adobe Fireworks if I upgraded.
Adobe products are sadly required for industry work.
It might be time to move on.
Imagine a library of books where every book over 5 years old is burned.
I agree that Apple and other companies are too aggressive about breaking compatibility but it's not the same thing as tried and true physical objects.
Changing icon should not require a new build. A new build should not require iPhone X support. iPhone X build target should not require Xcode 9. Xcode 9 should not require macOS 10.12. OS update should not break old Unity3D. Upgrading Unity should not break builds.
These are all examples of shitty engineering decisions that throw backwards compatibility under the bus for shaky (expedience, mostly) reasons.
https://www.homedepot.com/p/Milwaukee-18-Volt-NiCd-Battery-P...
On iOS, there is no other source. Once Apple removes an app from their store, that's it—unless you bought it already, it's gone forever, no recourse.
* The iPhone X was released on 2018.
* Xcode 9.0 was released on 2017, and 9.4.1 (last release) on 2018.
* macOS 10.12 was released on 2016.
I'm sorry to say, but this sort of setup does not reflect well on anyone working on the project. Apple's call out should be considered a wakeup call.
Also, doesn't Xcode 9 only support iOS releases up to iOS 11? The global market of all iOS versions lower than iOS 11 should lie in the lower single digits.
These aren't like node updates, these are closer to Firefox removing legacy extensions, except happening quarterly. There's no guarantee that something that is "stable" in your version will work the same way in a newer version. Unfortunately, the engine is tied to specific iOS SDK versions, so in order to use a more recent iOS SDK you're forced to upgrade your unity version alongside it...
If you don't want to be informed, then don't do that. But those issues could be real bugs.
For instance, one fine day GCC got the ability to diagnose situations when the indentation of an nested if statement is deceptive compared to the actual precedence of the clauses. So if someone had warnings as errors, and had such a statement, then their build stopped. If that was a real bug, they were grateful.
A clean build looks like this
CC foo.o
CC bar.o
CC parser.o
parser.c:42: warning: new thing found here (-Wnew-thing).
CC lexer.o
...
you hide all the details of the compiler command line so the diagnostics stand out.Warnings-as-errors is just a kind of negotiating hammer that is useful in team situations, when the developers have gotten used to ignoring new warnings, usually because they are hidden among reams of ignored old warnings.
Also, in a compiler that has a GCC-like interface, you can turn specific warnings into errors, which is useful. If there is something you don't tolerate in the code base, and it happens to be diagnosable as a warning, then you can error it.
GCC turns some required ISO diagnostics into mere warnings, like say assignments between incompatible pointer types. That kind of thing may be worth turning into an error.
The solution was to introduce a deprecation message that wasn't technically a warning, and warn about the upcoming depreciation warning.
Often a technical linux user will want to download a source tarball for a particular version of a utility or program, and build it on or for a particular linux distro they're using. They usually do not want ad-hoc modifications done to the source of all the specific utility versions they compile for their system this way.
Sometimes the package maintainers who make binaries for themselves and others don't want to fix bugs. At most some minor build things, but something actually broken is punted upstream.
You may see behaviors like the program being disabled (unavailable) for some platforms because it couldn't build or tests didn't pass. Or the package will stay on the old version of the program: 1.2.3 isn't building, so we just give up for now and stick with packaging 1.2.1. Maybe 1.2.4 will fix it. In these situations, package maintainers will not always contact upstream; the developer doesn't know unless they go into that distro's site and search the issues for activity related to their program.
Then one day, our startup brought some new employees on, who read the README and ran the indicated Docker command … and it failed with a mysterious bug requiring dev resources to debug! The exact thing you try to avoid by freezing the machine environment.
It turned out that Docker had silently pushed a backward-incompatible change in the format of docker-compose YAML files.
It’s like Office Space, “what would you say it is you do here?”
They don't help at all with kernel API drift, and barely help with libc drift.
You’re saying that using a container — which defines a specific version of an OS — shouldn’t protect against differences between that version and a new OS version? And shouldn’t save any effort whatsoever in reproducing the environment in which I got code working?
The sole purpose is so that I can leave an app configured to talk to port 8000 even though my machine is already using port 8000?
That feels like it falls short of the conventional case for virtualization or containerization.
One of the main selling points is security. (They don't do much for security, but that sort of thing doesn't matter much to sales).
The most useful feature is they reduce the pain associated having negligently-large build and runtime dependency trees.
They also add a few ulimit style tricks. Think "better than chroot, arguably worse than BSD jails", but with a standardized cross-linux-distro build system (dockerfiles)
I asked for their ostensible justification. A valid answer should not involve making up a justification I never referred to, with the implication I had done so, with you refuting said justification, even if other people proffer said justification.
And the reason that I asked, was because the first reply eye-rolled at the problem I ran into, and then (seriously, as best I can tell) suggested I should have solved it by nesting a VM within the existing VM to control the dependency chain that led to the problem — even though that was what the first VM exists to solve!
To clarify, here is that (dubious) reply again:
> That's not what containerization is about as can be easily demonstrated by simply running your container on a kernel that's built without some config option you rely on.
That is, surrounding the container by a controlled environment would avoid the problem… but I was already controlling the environment by a VM that exists to solve that problem! Hence, (sardonically) wondering what the first one is accomplishing.
> The most useful feature is they reduce the pain associated having negligently-large build and runtime dependency trees.
No, the most useful feature is locking down a machine spec that Just Works. When I have to go and debug things about that machine that suddenly fail, for reasons Docker (not the machine) introduced, I lost the most useful feature.
Sating my desire to have my app point at port 8000 and no other … is way, way down the list.
> and then (seriously, as best I can tell) suggested I should have solved it by nesting a VM within the existing VM
You were the first to suggest anything like that. My answer did not offer any suggestion for solution at all, read it again.
> No, the most useful feature is locking down a machine spec that Just Works.
That's not a feature Docker ever had or intended to have. Seems you have misunderstood something about what containers actually are. They're very explicitly not "virtual machines lite", and it sounds like you want an actual virtual machine instead.
As far as I know, the people making the incorrect claims/assumptions are distinct from the people that built commonly-used containerization software.
If you want to understand what containers are, start with the mental model that it is a chroot with /dev, /sys and /proc mounted, and with processes running with uid=0. Their sandboxing isn't quite that bad, but they are closer to chroot environments (or bsd jails) than a VM. Next, package a few things by writing dockerfiles, then deploy them to a raspberry pi or something.
If you still care, then follow up by reading the kubernetes tutorials.
Edit: This message is directed to SilasX.
What does "should" in this context even mean? They don't, because they're not meant to do that. They can be used to shield you from some differences, and for many use cases that subset is all that matters, but they don't and can't shield you from all of them.
You can't rely on containers alone if your goal is to ensure that your app will work on future operating systems. That's not something containers do. They only let you provide your own user space to run in a quasi-isolated environment, no more than that. You're still using the host's kernel which can still screw you up in multitude of ways (which is exactly what I said in my earlier comment), and you're still limited by API guarantees that the tools you use to make containers are providing you.
For example, apache can no longer run with SSL enabled on current synology NAS's docker environments.
To be clear, I’m not talking about having to clean up a few new warnings with a new compiler release. That’s fine and probably a good thing. We really have to have one of our top engineers dive into it for several days to get things in shape. It just seems really weird to me.