iOS Code Challenge Bonprix - aacml/Recruiting GitHub Wiki

We have created a small technical test for you to showcase how you work. Your task will be to create a small iOS Application that should open links in a WebView and use a hierarchy navigation that opens if you touch on a category node.

Challenges

  • Setup a new SingleViewApplication
  • Implement a TabBarController with a Tab for the "Shop" and a Tab for the "Assortment"
  • Each Tab should contain a NavigationController
  • The "Shop" Tab should contain a WebView and load https://www.bonprix.de on Startup.
  • The "Assortment" Tab should contain a ViewController or SwiftUI view for displaying the Assortment entries.
  • The Assortment entries must be fetched via an API Rest Call
    • The API Endpoint for the navigation entries is https://codechallenge.mobilelab.io/v1/bonprix/navigation and requires the following API-Key N8Nx0OwOvo1iuN2ZkFHZlyVKBVgoIcy4tUHMppO5 as x-api-key request header field.
    • You can preview the response in the terminal if you use curl with the header option to set the x-api-key curl -H 'x-api-key:N8Nx0OwOvo1iuN2ZkFHZlyVKBVgoIcy4tUHMppO5' https://codechallenge.mobilelab.io/v1/bonprix/navigation
    • The JSON structure of the response:
{
  "categories": [
    {
      "label": "Shop",
      "url": "https://www.bonprix.de"
    },
    {
      "label": "Damen",
      "url": "https://www.bonprix.de/kategorie/damen/",
      "image": "https://image01.bonprix.de/bonprixbilder/teaser/app/channels/app-dez-19a.jpg",
      "children": [
        {
          "label": "Zur Übersicht",
          "url": "https://www.bonprix.de/kategorie/damen/"
        },
        {
          "label": "Mode",
          "url": "https://www.bonprix.de/kategorie/damen-mode/",
          "children": [
            {
              "label": "Alle Artikel anzeigen",
              "url": "https://www.bonprix.de/kategorie/damen-mode/"
            },
            {
              "label": "Neuheiten",
              "url": "https://www.bonprix.de/kategorie/damen-neu/",
              "children": [
                {
                  "label": "Alle Artikel anzeigen",
                  "url": "https://www.bonprix.de/kategorie/damen-neu/"
                },
                {
                  "label": "Oberteile",
                  "url": "https://www.bonprix.de/kategorie/damen-alle-neuen-artikel-oberteile/"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Interaction

  • Node Interaction: If you touch inside a node a new ViewController/SwiftUI view must be pushed on the NavigationController. The entries of the cells are the children of the selected node. The title of the current ViewController/SwiftUI view is the label of the selected node. Moreover a back button will be displayed.

  • Back button Interaction:

    If the user presses the back button the current ViewController/SwiftUI view needs to be popped.

  • Link Interaction:

    If you touch on a link a new ViewController/SwiftUI view must be pushed and the url of the selected link should be loaded inside of a WebView.

  • Teaser Images:

    The top nodes may have an image set. This image shall be displayed as Teaser image for the nodes and children.

Please have a look at the following gif for a better understand of the functionality:

Or download the bonprix App from the German App store.

Interaction should look like the current iOS Version of the bonprix App available on the German App Store

Hint:

  • Feel free to use a framework for Networking operations, if so please use cocoapods to include the dependency in your project.
  • You do not need to style your app like the bonprix design. Focus on the interaction and functionality.

Requirements

  • Your code must be written in Swift 5.x
  • Minimum supported OS must be iOS 14
  • Use Xcode 13.x
  • Write tests
  • It must compile and run in the iPhone Simulator
  • Write a paragraph or two on how you approached the work and what you considered during development
  • We like git so feel free to send us the link to your repository or send us the project as zipped archive

Additional Information

We understand that you’ve probably got a full-time job and a personal life so doing the above test could be definitely finished in a couple of hours.

If you have any questions, email us and we can add it to this readme.

Good luck!