Packaging and Distribution

Introduction

Packaging software allows a user of the software to treat multiple interacting software modules as a single cohesive whole. The assumption being that the system has been tested and the modules are confirmed to work together. This provides a means of eliminating uncertainty when it comes to running the software.

Packaging software also provides a convenient way of distributing software as a single unit, including any configuration or auxiliary files which might be needed. This is particularly important when sharing libraries between different development teams as the package can be imported and used in existing software and can be treated as a single unit.

Desktop Software Packaging

The de-facto standard for distribution of desktop software on Windows is Microsoft Windows Installer (MSI).

There are various applications which can create MSI-based installers. The most popular is Flexera InstallShield which is a complete IDE for building installers.

InstallShield can be extremely expensive to license, however Flexera also has InstallShield Limited Edition for Visual Studio which is a cut-down version of the full InstallShield product which integrates with Visual Studio. This might be a suitable option for smaller projects.

An alternative completely free solution is the WIX Toolset .

WIX takes an alternative approach to InstallShield and does not have an IDE of its own. Instead it integrates with Visual Studio and installers are built using XML files hosted in a Visual Studio project. Although there is more work involved upfront, this is a much more cost-effective option for building installers.

Cloud-based Distribution for Web Applications

Trimble Cloud Services (TCS) - provides support and infrastructure for cloud-based applications at Trimble using either Amazon Web Services (AWS) or Microsoft Azure.

Increasingly web-based applications are being hosted in Docker containers which provide a number of advantages both in terms of cost and convenience over hosting applications directly on base hardware or in virtual machines either locally or in the cloud. Docker containers are fully supported on both AWS and Azure.

Additionally software is increasingly being architected as independent microservices which are particularly well suited for being hosted in Docker containers.

Internal Software Reuse

TPaaS (Trimble Platform as a Service) provides the API Cloud a service for managing and publishing APIs for consumption by other Trimble applications.

For reusable software modules, e-Tools provides Artifactory Pro . Artifactory Pro is capable of hosting multiple artifact repositories for a lot of different types of software artifacts, this includes npm repositories for JavaScript modules, NuGet for .NET packages, Maven for Java, PyPI for Python etc. Artifactory also integrates well with e-Tools Bamboo service for build orchestration. See e-tools Artifactory for more details on using Artifactory.

Language Specific Tools For Packaging and Distribution

Python

Distutils (setuptools) has become the primary method for packaging and distributing python packages and scripts. By using distutils and building a package with setup.py you can easily distribute packages publically on PyPi or privately using a Git Repository or Artifactory .

This Quick Start give a good high level overview on building your first Python package. For more advanced features refer to the setuptools documentation .

  • Use wheels as the library package format build using setuptools.

  • Use pip to install packages.

  • Store internal packages in Artifactory.

Java

JavaScript / Node

  • Client-side should all be minified. You can then expose the client-side scripts via CDN such as CloudFront/S3.

  • In order to optimize client-side applications for size and maximum download performance, it is recommended to use a module bundler to combine JavaScript files along with static assets such as CSS and images into packages. The current de-facto standard for this is Webpack . Webpack can also be used to minify JavaScript.

  • Server-side packages can be written as npm modules and stored in a private repo such as Artifactory which makes sharing/deploying easier than managing the actual code repo. Modules are made using npms’s tooling .

C#

  • NuGet is the primary package manager source for .NET and .NET Standard projects.

  • Any NuGet package can be used with any .NET language as long as the.NET framework version of the project matches the version required by the NuGet package.

  • The NuGet.org server is used by default and anyone can publish a public project to the public server.

  • Private NuGet servers can also be hosted and used such as an Artifactory repository hosted by eTools this is the primary recommendation for NuGet use within Trimble.

  • Installing and using packages

  • Creating a .NET NuGet Package

  • Creating a .NET Standard NuGet Package

Objective-C

Conan

This is the package manager we’re slowly integrating within our SketchUp projects, we privately host our packages in Trimble’s Artifactory , hosted by eTools.

You specify the dependencies for your project in a simple text file: your conanfile.txt. Conan recursively resolves dependencies between libraries, fetches libraries (or source code) for all dependencies, and creates and maintains the integration configuration files (Make, autotools, gcc/clang, Visual Studio, Xcode, etc .).