title | description | services | documentationcenter | author | manager | editor | ms.service | ms.devlang | ms.topic | ms.tgt_pltfrm | ms.workload | ms.date | ms.author | ms.custom |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
include file |
include file |
active-directory |
dev-center-name |
andretms |
mtillman |
active-directory |
na |
include |
ios |
identity |
09/19/2018 |
andret |
include file |
This section provides step-by-step instructions for how to create a new project to demonstrate how to integrate an iOS application (Swift) with Sign-In with Microsoft so it can query Web APIs that require a token.
Prefer to download this sample's XCode project instead? Download a project and skip to the Configuration step to configure the code sample before executing.
Carthage package manager is used during the preview period of MSAL – it integrates with XCode while maintaining the ability for Microsoft to make changes to the library.
- Download and install the latest release of Carthage here
- Open Xcode and select
Create a new Xcode project
- Select
iOS
>Single view Application
and click Next - Give a product name and click Next
- Select a folder to create your app and click Create
Follow the instructions below to pull and then build the latest version of MSAL libraries using Carthage:
- Open the bash terminal and go to the App’s root folder
- Copy the below and paste in the bash terminal to create a ‘Cartfile’ file:
echo "github \"AzureAD/microsoft-authentication-library-for-objc\" \"master\"" > Cartfile
- Copy and paste the below. This command fetches dependencies into a Carthage/Checkouts folder, then builds the MSAL library:
carthage update
The process above is used to download and build the Microsoft Authentication Library (MSAL). MSAL handles acquiring, caching and refreshing user tokens used to access APIs protected by the Azure Active Directory v2.
- In Xcode, open the
General
tab - Go to the
Linked Frameworks and Libraries
section and click+
- Select
Add other…
- Select:
Carthage
>Build
>iOS
>MSAL.framework
and click Open. You should seeMSAL.framework
added to the list. - Go to
Build Phases
tab, and click+
icon, chooseNew Run Script Phase
- Add the following contents to the script area:
/usr/local/bin/carthage copy-frameworks
-
Add the following to
Input Files
by clicking+
:
$(SRCROOT)/Carthage/Build/iOS/MSAL.framework
A Main.storyboard file should automatically be created as a part of your project template. Follow the instructions below to create the app UI:
- Control+click
Main.storyboard
to bring up the contextual menu, and then click:Open As
>Source Code
- Replace the
<scenes>
node with the code below:
<scenes>
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="MSALiOS" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Microsoft Authentication Library" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ifd-fu-zjm">
<rect key="frame" x="64" y="28" width="246" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Logging" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="98g-dc-BPL">
<rect key="frame" x="16" y="277" width="62" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2rX-Vv-T1i">
<rect key="frame" x="87" y="100" width="200" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Call Microsoft Graph API"/>
<connections>
<action selector="callGraphButton:" destination="BYZ-38-t0r" eventType="touchUpInside" id="Kx0-JL-Bv9"/>
</connections>
</button>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" editable="NO" textAlignment="natural" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qXW-2z-J7K">
<rect key="frame" x="16" y="324" width="343" height="291"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<accessibility key="accessibilityConfiguration">
<accessibilityTraits key="traits" updatesFrequently="YES"/>
</accessibility>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9u4-b8-vmX">
<rect key="frame" x="137" y="138" width="100" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Sign Out"/>
<connections>
<action selector="signoutButton:" destination="BYZ-38-t0r" eventType="touchUpInside" id="kZT-P8-0Zy"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<connections>
<outlet property="loggingText" destination="qXW-2z-J7K" id="uqO-Yw-AsK"/>
<outlet property="signoutButton" destination="9u4-b8-vmX" id="OCh-qk-ldv"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="140" y="137.18140929535232"/>
</scene>
</scenes>