Descending into iOS Distribution Hell: A Delphi Dev’s Survival Guide (2024 Edition)

Every Year I have to renew my developer certificates and provisioning profiles for my distributed Delphi Apps… and every year, something goes haywire. Over the years I have refined these instructions to attempt to save myself (sometimes literally WEEKS) of absolute hell. So if you want to survive this process, do exactly what I say in this guide. If you don’t, you’ll regret it! Feel free to comment on any pitfalls you encounter during this time. This really only covers RENEWALS. I am assuming your app was built and distributed at some time in the past and now you’re trying to just keep it alive.

Continue reading “Descending into iOS Distribution Hell: A Delphi Dev’s Survival Guide (2024 Edition)”

10 Reasons NOT to use Unity as your game engine

Unity3D has undoubtedly been a popular game engine choice for many developers, especially indie developers, due to its ease of use, cross-platform capabilities, and extensive asset store. However, like any software, it has its drawbacks that may make it less suitable for certain projects or teams. In this blog post, we’ll delve into the ten worst aspects of Unity3D, shedding light on some of the frustrations and limitations that users may encounter.

  1. Import, reimport, reimport, reimport, reimport: One of the most frustrating aspects of Unity is the constant need to reimport assets. Whether it’s textures, models, or scripts, making changes often requires multiple reimports, leading to inefficiencies and delays in the development process.
  2. Way behind Unreal on critical technology (Nanites): Unity has been criticized for being slower to adopt cutting-edge technologies, such as Unreal Engine’s Nanite virtualized geometry, which allows for incredibly detailed environments without performance loss. This can be a significant disadvantage for developers looking to create visually stunning and optimized games.
  3. Fragmented feature sets among different render pipelines: Unity’s three main render pipelines – Built-in Render Pipeline (BRP), Universal Render Pipeline (URP), and High Definition Render Pipeline (HDRP) – have fragmented feature sets. This creates confusion for developers who may need to switch pipelines or encounter limitations that hinder their vision.
  4. Fragmented documentation among different render pipelines AND different versions: Documentation in Unity can be a mixed bag, particularly when it comes to render pipelines and different Unity versions. Often, documentation can be outdated, incomplete, or confusing, making it challenging for developers to find accurate information and troubleshoot problems effectively.
  5. Platform inconsistencies: Developers often face issues where features that work flawlessly in the Unity editor do not function as expected on the target platform. Even for popular platforms like Windows, problems may persist, such as struggles with HDRP Area lights that fail to work correctly.
  6. Integration with popular modeling software is never seamless (Blender): Integrating Unity with popular 3D modeling software like Blender can be a cumbersome process. Issues with importing, exporting, and maintaining proper object hierarchies can lead to time-consuming workarounds and hinder a smooth development pipeline.
  7. Team Development is hard (Meta files, scene merges): Unity relies on meta files to store crucial information about assets, which can create conflicts during team development. Merging scenes and handling version control can be difficult and error-prone, leading to wasted time and effort.
  8. Long compile times: Even for relatively simple projects, Unity’s compile times can become painfully long, causing productivity setbacks and frustrations for developers who need rapid iteration.
  9. Long bake times that often don’t even work: The baking process in Unity, used for pre-calculating lighting, can be time-consuming, and sometimes the results may not be as expected. Frequent issues with lighting artifacts and discrepancies may arise, adding to the frustration during development.
  10. Expensive, yet updates aren’t coming fast enough: Unity’s pricing structure may not be as budget-friendly for small indie developers. However, some users argue that despite the cost, the engine’s updates and improvements often lag behind expectations, making it difficult for developers to stay up-to-date with the latest technologies and features.

While Unity3D remains a popular choice for many game developers, it’s essential to acknowledge its limitations and drawbacks. From the frustrating import process and fragmented documentation to platform inconsistencies and long compile times, Unity has its fair share of issues that can hinder development productivity. Despite these downsides, it’s essential to remember that no game engine is perfect, and developers must carefully evaluate their project requirements and team capabilities before choosing the best engine for their game development journey.

How Copy a MySQL Database

Wouldn’t it be nice if it was as simple as “copy database1 to database2”? Or something like that? But that would be too easy! Although to be fair, copying a MySQL database is easier than many other databases. But the caveat is that if you do it wrong, it is easy to accidentally export the database names, and importing an improperly exported database potentially overwrite production data if you’re not careful.

Continue reading “How Copy a MySQL Database”

Dusting off A 20-Year-Old Delphi Documentation Generator

Proving that some Delphi code can be parsed by my 20-year-old doc generator.

Years ago I was told by an asshole boss at a company I worked for that I was going to be “fired” if I didn’t “document my code” (although it should be noted that I maintained a department library of dozens and dozens of white papers on our software design… but he was too much of an asshole to care).

To shut him up, I showed up to the scheduled meeting a month later with a stack of paper as tall as two dictionaries, full of detailed information about every single class, method, and function written by our six-person development team. I determined from the start that there would have been no way I could have done this manually, so I spent weeks of my personal time building a documentation generator to handle the chore with its own Pascal language compiler.

Although barely working, I have brought my old documentation generator back to life and built a barely-working barebones web front end for it online for the purpose of documenting my Delphi CommonX library, but don’t get too eager to read much of it because the documentation sitting on the documentation server is super sparse and simply for the purpose of testing a new searchable database of classes and symbols.

Continue reading “Dusting off A 20-Year-Old Delphi Documentation Generator”

After Nearly a Week of Pissing Around, I Finally Got Delphi to Display a Downloaded, Local PDF on iOS When Sandboxed

Computer programs have become more complex and connected to the world via “always-on” connections…. and due to the constant threat of new internet exploits, Operating systems are a frustrating, moving target.

As a result, certain things that worked on the last version of an operating system are banned in the next, and the churn is often miserable, especially if you’re a small company with limited resources. Simply keeping your app available on the Apple App Store requires regular maintenance, periodic updates, and frustrating amounts of your time.

I finally got my client’s PDF Reporting functionality restored in their iOS app and the solution was very simple, although it required trial and error. In fairness, the solution for iOS was much simpler than the Android solution that I had to figure out a few months back. If you need help with Android, fire me a comment and I’ll possibly update this blog.

Continue reading “After Nearly a Week of Pissing Around, I Finally Got Delphi to Display a Downloaded, Local PDF on iOS When Sandboxed”