Configurazione dell'applicazione iOSSetting up your iOS application

Questa sezione fornisce istruzioni dettagliate su come creare un nuovo progetto per illustrare come integrare un'applicazione iOS (Swift) con Accedi con Microsoft per poter eseguire query su API Web che richiedono un token.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.

Se invece si preferisce scaricare questo progetto XCode di esempio,Prefer to download this sample's XCode project instead? scaricare un progetto e passare direttamente al passaggio di configurazione per configurare il codice di esempio prima di eseguirlo.Download a project and skip to the Configuration step to configure the code sample before executing.

Installare Carthage per scaricare e compilare MSALInstall Carthage to download and build MSAL

L'utilità di gestione pacchetti di Carthage viene usata durante il periodo di anteprima di MSAL: esegue l'integrazione con XCode lasciando a Microsoft la possibilità di apportare modifiche alla libreria.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.

  • Scaricare e installare la versione più recente di Carthage quiDownload and install the latest release of Carthage here

Creazione dell'applicazioneCreating your application

  1. Aprire Xcode e selezionare Create a new Xcode projectOpen Xcode and select Create a new Xcode project
  2. Selezionare iOS > Single view Application e fare clic su Next (Avanti)Select iOS > Single view Application and click Next
  3. Assegnare un nome prodotto e fare clic su Next (Avanti)Give a product name and click Next
  4. Selezionare una cartella per creare l'app e fare clic su Create (Crea)Select a folder to create your app and click Create

Creare il framework MSALBuild the MSAL Framework

Seguire queste istruzioni per eseguire il pull e quindi creare la versione più recente delle librerie MSAL usando Carthage:Follow the instructions below to pull and then build the latest version of MSAL libraries using Carthage:

  1. Aprire il terminale Bash e andare alla cartella radice dell'appOpen the bash terminal and go to the App’s root folder
  2. Copiare il codice seguente e incollarlo nel terminale Bash per creare un file "Cartfile":Copy the below and paste in the bash terminal to create a ‘Cartfile’ file:
echo "github \"AzureAD/microsoft-authentication-library-for-objc\" \"master\"" > Cartfile
  1. Copiare e incollare il codice seguente.Copy and paste the below. Questo comando recupera le dipendenze in una cartella Carthage/Checkouts, quindi crea la libreria MSAL:This command fetches dependencies into a Carthage/Checkouts folder, then builds the MSAL library:
carthage update

Il processo precedente viene usato per scaricare e creare l'istanza di Microsoft Authentication Library (MSAL)The process above is used to download and build the Microsoft Authentication Library (MSAL). che gestisce l'acquisizione, la memorizzazione nella cache e l'aggiornamento dei token utente usati per accedere ad API protette da Azure Active Directory v2.MSAL handles acquiring, caching and refreshing user tokens used to access APIs protected by the Azure Active Directory v2.

Aggiungere il framework MSAL all'applicazioneAdd the MSAL framework to your application

  1. In Xcode aprire la scheda GeneralIn Xcode, open the General tab
  2. Andare alla sezione Linked Frameworks and Libraries e fare clic su +Go to the Linked Frameworks and Libraries section and click +
  3. Selezionare Add other….Select Add other…
  4. Selezionare: Carthage > Build > iOS > MSAL.framework e fare clic su Open (Apri).Select: Carthage > Build > iOS > MSAL.framework and click Open. MSAL.framework risulterà aggiunto all'elenco.You should see MSAL.framework added to the list.
  5. Andare alla scheda Build Phases, fare clic sull'icona + e scegliere New Run Script PhaseGo to Build Phases tab, and click + icon, choose New Run Script Phase
  6. Aggiungere il contenuto seguente all'area dello script:Add the following contents to the script area:
/usr/local/bin/carthage copy-frameworks
  1. Aggiungere il contenuto seguente a Input Files facendo clic su +:Add the following to Input Files by clicking +:
$(SRCROOT)/Carthage/Build/iOS/MSAL.framework

Creazione dell'interfaccia utente dell'applicazioneCreating your application’s UI

Nell'ambito del modello di progetto viene automaticamente creato un file Main.storyboard.A Main.storyboard file should automatically be created as a part of your project template. Seguire queste istruzioni per creare l'interfaccia utente dell'app:Follow the instructions below to create the app UI:

  1. Tenendo premuto CTRL, fare clic su Main.storyboard per visualizzare il menu di scelta rapida e quindi fare clic su: Open As > Source CodeControl+click Main.storyboard to bring up the contextual menu, and then click: Open As > Source Code
  2. Sostituire il nodo <scenes> con il codice seguente: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>