cbpowell / MarqueeLabel

A drop-in replacement for UILabel, which automatically adds a scrolling marquee effect when the label's text does not fit inside the specified frame
MIT License
4.19k stars 561 forks source link

Avoid Xcode 12 warning -> move target to iOS 9 #256

Closed tbechtum closed 3 years ago

tbechtum commented 3 years ago

Usage Details

Expected Behavior

Xcode 12 build without warnings, proposal to move target to iOS 9

Actual Behavior

Xcode 12.x warning The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.0.99.

Steps to Reproduce the Problem

  1. Use latest Xcode 12 or 12.0.1
  2. Use MarqueLabel in a Swift project with target iOS 11
tbechtum commented 3 years ago
  1. Did you plan to move this project to iOS 9 already?
  2. Could this Xcode warning cause library loader errors and interface builders update failures on the storyboard?

Thanks for a reply

cbpowell commented 3 years ago

I pushed rev 4.0.3 to change it with SPM, and during the Cocoapods trunk push I realized it would happen there too.

On the one hand, iOS 8 is super old at this point and I’m not really interested in supporting it. On the other hand, raising the min version would technically require a major rev bump per traditional SemVer rules because it would break it for anyone still needing it on iOS 8 (where it still works fine, with older Xcodes). It seems silly to bump a major rev, given it’s really just a problem on the tool side.

I’ll explore if dropping the minimum version from the podspec is an option instead, just to clear the warnings. Or the manual option to silence it via your podfile can silence it for now.

chickdan commented 3 years ago

It seems silly to bump a major rev, given it’s really just a problem on the tool side.

This is causing a problem for any project targeting less than iOS 12 after the changes in 4.0.3 due to not being a major revision. MarqueeLabel is a dependency for NotificationBanner and now any project that relies on it is breaking. The rules around SemVer are there for a reason; they aren't "silly" because they prevent exactly the problem you have created.

cbpowell commented 3 years ago

Whoa @chickdan coming in spicy there. I wasn't saying SemVer was silly, only that it seemed silly to bump a major rev because the tool changed. I was trying to be considerate of people who've specified version <= 4.x.x under the typical assumption that a 5.x revision would be for major functional changes, rather what would be essentially the continuation of 4.x.x bug fixes.

So instead of a major rev, I was trying to find an option that I hoped would work for mostly everybody. Can you describe the problem it's causing with targeting less than iOS 12?

I was thinking removing the default deployment target would generally increase compatibility between Xcode 12 and prior versions, as I didn't think it was strictly necessary for SPM or Cocoapods spec definition. If I got that wrong, I can definitely work to fix it.

cbpowell commented 3 years ago

Well removing the deployment target from Cocoapods definitely doesn't work. My tests with SPM seemed fine, but I'm sure something similar could happen.

After a bunch of reading of SemVer issues on this topic, it's not really cut and try on what to do. The MarqueeLabel API hasn't changed, and 4.x.x would continue to work on iOS 8 through iOS 14 just like a theoretical 5.0.0 would, even if 5.0.0 claimed iOS 8 wasn't supported.

I'm inclined to just state iOS 8 is NOT supported through package managers, and rev to 4.0.4 with minimum deployment targets set to iOS 9 to make the package management systems happy. Someone targeting iOS 8 might run into SPM or Cocoapodsissues, but that can be easily worked around by manually importing the source files. Thoughts?

cbpowell commented 3 years ago

Bumped the deployment target to iOS 9, and will note it might make targeting iOS 8 with SPM/Cocoapods/whatever an issue on the README.

chickdan commented 3 years ago

My apologies, that did come across more harsh than I had intended.

Can you describe the problem it's causing with targeting less than iOS 12?

Any project targeting lower than iOS 12 produces this error when trying to compile after adding MarqueeLabel: Compiling for iOS 10.0, but module 'MarqueeLabel' has a minimum deployment target of iOS 12.0

and 4.x.x would continue to work on iOS 8 through iOS 14 just like a theoretical 5.0.0 would

The problem isn't with the PodSpec or SPM, it's that the project's requirements changed here where the deployment target was increased from iOS 8 to iOS 12. So this issue is still present in 4.0.4 because it's not a toolchain issue but a project issue. If this change was intended then it does need a major revision in order to keep builds from breaking.

cbpowell commented 3 years ago

No worries - thanks for explaining the issue. That change was essentially accidental on my part! I'm reverting them back in 4.0.5 now.