Stack Share
Using StackShare you can find out more about the technologies other startups have used to build their stack.
Using StackShare you can find out more about the technologies other startups have used to build their stack.
For the early adopters in there, this is a great place to launch your startup or hunt for new products.
Hands down the best resource for startup news
Dribbble is a community of designers sharing screenshots of their work, process, and projects
Very similar to Product Hunt except that it’s more underground


{% if posts %} {% for post in posts %}
{{ post.num_comments }} comment{{ post.num_comments|pluralize }}
No results found, sorry.


The D3 difference chart shows the difference between the frequencies of the occurrences of the Global Warming and Climate change in the parsed crawled data. The green shaded area denotes that the frequency of Global warming was greater that that of climate change. The red shaded region shows other way round. The graph shows that the rate of growth for global warming is proportional to the rate of climate change.


Exercise 1: Using data binding in a Xamarin.Forms application (XAM270)
This exercise introduces how you create and use bindings in code-behind and XAML.
To complete the exercise, you will need Visual Studio for Windows or macOS with the Xamarin development tools installed. You will also need either an emulator/simulator or a device to run the exercise on. Please see the setup page if you need help installing the Xamarin development environment.
Open the starter solution
Open the starter solution from the Exercise 1 > Start folder in your copy of the cloned or downloaded course materials in either Visual Studio on Windows or Visual Studio for Mac.
- Open the FunFlacts.sln (Fun Flag Facts) solution in the Exercise 1/Start.
- Build and run the application to ensure it's working. It displays a single flag and allows you to edit the details of the flag. It has a Show button in the Tool bar which displays the details of the underlying
Flag
in an alert box. - The solution contains five projects but you will perform all your work in the FunFlacts Portable Class Library which is the shared code and UI layer. You also have a data assembly where all the flag data is loaded from - this could be from an Azure service for example. The other three projects are the platform-specific host projects for iOS, Android and UWP.
- Here are the classes / files you will work with:
| File | Description |
|---|---|
| App.cs | Contains the Application class for your Xamarin.Forms application which defines the starting page for the application. |
| MainPage.xaml(.cs) | Defines the UI and logic for your initial page. The XAML file defines the UI using markup, the associated code file then provides the behavior for the UI. |
| FlagRepository.cs | This class is in the FlagData project and contains the sample data you will be working with. This defines a repository class that retrieves your flags. |
| Flag.cs | Also in the FlagData project and defines the Flag class used for all the objects coming from the repository. |
Create a binding in code
First, you'll manually create a single binding to see the required information and steps. There are three required pieces of information: source (BindingContext
), property path, and target BindableProperty
.
- Open MainPage.xaml.cs and locate the
InitializeData
method. - Comment-out or delete the lines which set the country
Picker
control'sSelectedItem
property and theSelectedIndexChanged
event handler. - Set the
BindingContext
on thecountry
control to the activeFlag
. - Create a
Binding
which has the property path - you want to tie to theCountry
property on your flag. -
Finally, add a binding to the
country
control using theSetBinding
method - you want to associated theBinding
to thePicker.SelectedItemProperty
property.private void InitializeData() { country.ItemsSource = (IList) repository.Countries; // country.SelectedItem = CurrentFlag.Country; // country.SelectedIndexChanged += (s, e) => CurrentFlag.Country = repository.Countries[country.SelectedIndex]; country.BindingContext = CurrentFlag; country.SetBinding(Picker.SelectedItemProperty, new Binding(nameof(CurrentFlag.Country))); ... }
-
Run the application and make sure the country picker is correctly populated. Try changing it's value and then click the Show button to see if it changed the underlying object as you can see here.
There is a generic version of
SetBinding
which doesn't require a string; you are usingnameof
here which performs the same function using a modern C# feature.
Create XAML-based bindings for our controls
More often than not, you will place bindings in XAML which reduces the code-behind, decouples the UI, and makes the code-behind primarily behavior.
-
First, remove the property setters and event handlers from the following controls in the code-behind:
- country
- adopted
- hasShield
- description
You want to leave the flagImage control alone for now - these will require a little more work to data bind.
-
Set the
BindingContext
which our XAML bindings will pull from. You could set it on every single element here in code, but remember from the lecture thatBindingContext
is inherited when it is set on a parent element. So, assign theBindingContext
on the page itself - make it theFlag
object you want to get all our data from. Do this at the end of theInitializeData
method - in particular make sure it's set after thePicker.ItemSource
property is set.If the country Picker no longer displays the country when you run the app, it's likely you are setting the
ItemsSource
after theBindingContext
which clears the value.private void InitializeData() { country.ItemsSource = (IList) repository.Countries; // country.SelectedItem = CurrentFlag.Country; // country.SelectedIndexChanged += (s, e) => CurrentFlag.Country = repository.Countries[country.SelectedIndex]; // country.BindingContext = CurrentFlag; // country.SetBinding(Picker.SelectedItemProperty, new Binding(nameof(CurrentFlag.Country))); flagImage.Source = CurrentFlag.GetImageSource(); // adopted.Date = CurrentFlag.DateAdopted; // adopted.DateSelected += (s, e) => CurrentFlag.DateAdopted = e.NewDate; // hasShield.IsToggled = CurrentFlag.IncludesShield; // hasShield.Toggled += (s, e) => CurrentFlag.IncludesShield = hasShield.IsToggled; // description.Text = CurrentFlag.Description; // Set the binding context this.BindingContext = CurrentFlag; }
-
Open MainPage.xaml and add
{Binding PROPERTY_NAME}
tags on each of the above controls to tie the appropriate property to each target. Examine the code you just commented out to determine the proper source and target properties. For example, the country element would look like this:<Picker x:Name="country" SelectedItem="{Binding Country}" />
This ties the
SelectedItem
property of thePicker
control to theCountry
property of theBindingContext
(flag).<Picker x:Name="country" SelectedItem="{Binding Country}" /> <Label Text="Current Design was Adopted on" FontAttributes="Bold" /> <DatePicker x:Name="adopted" MinimumDate="01/01/1700" HorizontalOptions="Start" Date="{Binding DateAdopted}" /> <Label Text="Has Shield" FontAttributes="Bold" /> <Switch x:Name="hasShield" IsToggled="{Binding IncludesShield}" /> <Label Text="Fun Fact" FontAttributes="Bold" /> <Label x:Name="description" Text="{Binding Description}" />
- Run the application and ensure each field displays data.
- Press the arrows on the toolbar to try different flags - the values should change. This is because you are changing the
BindingContext
- and therefore it's changing the binding values! - Try changing a control's value (for example, select a new country) and click the Show button to see if it changed the underlying object. Hint: it should!
Exercise summary
In this exercise, you updated an existing Xamarin.Forms application and modified it to use Data Binding to populate the UI.
You can view the completed solution in the Exercise 1 > Completed folder of your copy of the cloned or downloaded course materials.


Step 4Extract code snippets by highlighting those code snippets which are relevant for the selected figure
Step 5
Mark the variable and the value which should be manipulated by the slider
Selected {{selectedVariable.varName}} with value {{selectedVariable.val}}Invalid Selection


--- layout: post title: "Breaking the Dependency" comments: true ---
After beginning to read "Working Effectively with Legacy Code" by Michael Feathers I learned a lot about how i should actually approach code i have never worked with before and that is classed as legacy.
Feathers quite simply states that code is legacy when it is ".....without tests". He said that no matter how well the code is written, according to whatever patterns you like and as readable as it can be that if it is not tested then it is bad/ legacy code.
This book has a legacy code change algorithim.
So what has made me change? When i started a new job recently i seen a lot of legacy code. I had to immediately try and tackle the issue as i am very passionate about good, clean, well tested code. In order to make the code changes necessary i had to break a lot of dependencies.
On working with an API i was presented with the following public method. This was consumed by 2 webservices and it is used to track the use of the site by a user.
private ITrackingPixel ReplacePlaceholders(ITrackingPixel tp) { //If there is no HTMl code then don't do the replace and return if (tp == null || string.IsNullOrEmpty(tp.HTMLCode)) return tp; string htmlCode = tp.HTMLCode; string pixel_placeholders = ConfigurationManager.AppSettings["TrackingPixelPlaceHolders"]; if (string.IsNullOrEmpty(pixel_placeholders)) { //Log _log.Warn("TrackingPixel's placeholders do not exist in the configuration."); return tp; } string[] placeholders = pixel_placeholders.Split(new char[]{','}); if (TrackingPixel.UserID != null && placeholders.Contains("USERID")) { htmlCode = htmlCode.Replace(MakePlaceholder("USERID"), TrackingPixel.UserID.ToString()); } if (TrackingPixel.VisitID != null && placeholders.Contains("VISITID")) { htmlCode = htmlCode.Replace(MakePlaceholder("VISITID"), TrackingPixel.VisitID.ToString()); } tp.HTMLCode = htmlCode; return tp; }
Now this is what i would call pretty nasty code. I couldn't test it as it had a dependency on ConfigurationManager and getting appSettings from it. I had 2 ideas about how i could break the configuration manager dependency:
public class ConfigurationManager: IConfigurationManager { public string GetAppSettingsPropertyValue(string configurationParameter) { return System.Configuration.ConfigurationManager.AppSettings[configurationParameter]; } }
this may not be the best way of doing this but its currently effective and means that the segment of code concerned is fully tested.
private IConfigurationManager _CONFIG; ........ string pixel_placeholders = _CONFIG.GetAppSettingsPropertyValue("TrackingPixelPlaceHolders"); if (string.IsNullOrEmpty(pixel_placeholders)) { //Log _log.Warn("TrackingPixel's placeholders do not exist in the configuration."); return tp; }
It may not be "clean" or efficient but its a first step for me in this. I am now confident of making changes to this method without breaking anything
this was a real breakthrough moment for me & has really helped me develop my unit testing skills


MidCamp
How to RTFM
as M->the Entire Internet
Avi Schwab
Look familiar?
The Problem:
How do we get from this...
...to this?
“Whatever you do in life, surround yourself with smart people who’ll argue with you.”
-Some sportsball man
A Book Apart
http://www.abookapart.com/
Words, words
Moving & Talking Words!
drupal.org/project/______
- Learn how often a project is used/updated
- READ THE COMMENTS
- Use the Issue Queue! Submit an issue, even if it's "I need help with this too."
When in doubt, dsm(or dpm)
but have Devel installed first!
Learn more, and get help doing it


| Services |
| CheckBox |
describes a check box control which can (but not necessarily has to) be bound to a database field.
|
| ComboBox |
describes a combo box control.
|
| CommandButton |
describes a button control.
|
| CurrencyField |
describes a control which can be used for inputting currency values, and
which can (but not necessarily has to) be bound to a database field.
|
| DateField |
describes a control which can be used for inputting date values, and
which can (but not necessarily has to) be bound to a database field.
|
| FormattedField |
describes a control which can be used for inputting values with a arbitrary formatting, and
can (but not necessarily has to) be bound to a database field.
|
| GridControl |
describes a table-like control for displaying data.
|
| GroupBox |
describes a control which can be used for visually grouping controls
|
| ImageButton |
describes a control which can be used for displaying images on a control acting like a button.
|
| ImageControl |
describes a control used for displaying images stored in a database.
|
| InteractionGridControl |
is an extended grid control, which allows the user to customize some of it's user interface's aspects.
|
| ListBox |
describes a list box control which can (but not necessarily has to) be bound to a database field.
|
| NavigationToolBar |
This service specifies the model for control which provides controller
functionality for a ::com::sun::star::form::component::DataForm, such as navigating or filtering
the form.
|
| NumericField |
describes a control for inputting numeric values and which can (but not necessarily has to)
be bound to a database field.
|
| PatternField |
describes a control for inputting text complying to a given pattern,
and which can (but not necessarily has to) be bound to a database field.
|
| RadioButton |
describes a radio button control which can (but not necessarily has to) be bound to a database field.
|
| SubmitButton |
specifies a button control which can execute external submissions
|
| TextField |
describes a control for entering arbiotrary text which can (but not necessarily has to) be bound
to a database field.
|
| TimeField |
describes a control for inputting time values which can (but not necessarily has to) be bound
to a database field.
|
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


| DevIL Documentation | Home | Previous | Next |
The ilTexImage function changes the current bound image to use new dimensions.
ILboolean ilTexImage(
ILuint Width,
ILuint Height,
ILuint Depth,
ILubyte Bpp,
ILenum Format,
ILenum Type,
ILvoid *Data
);
Any current image data is destroyed by ilTexImage and replaced by a new image with the attributes specified. The new image data has undefined values. To set the new image data to a certain value, use ilClearImage or ilClearImageTo.
IL_ILLEGAL_OPERATION - There is currently no image bound. Use ilGenImages and ilBindImage before calling this function.
IL_INVALID_PARAM - One of the parameters provided was invalid. Width, Height, Depth or Bpp was an incorrect 0.
IL_OUT_OF_MEMORY - Could not allocate memory for the new image data.


Weather Conditions
- Location
- Temperature
- Humidity
- Pressure
- Rain (Inches)
- Dew Point
Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they live in Bookmarksgrove right at the coast of the Semantics, a large language ocean. A small river named Duden flows by their place and supplies it with the necessary regelialia. It is a paradisematic country, in which roasted parts of sentences fly into your mouth.
Even the all-powerful Pointing has no control about the blind texts it is an almost unorthographic life. One day however a small line of blind text by the name of Lorem Ipsum decided to leave for the far World of Grammar.


High Score
Time Left:
65
Javascript Code Quiz!
Time for a fun little challenge! Try and answer all of the questions before time runs out. Each incorrect answer will take away 10 seconds from the timer. Good luck!
start
Submit


An EPICS areaDetector driver for the LBNL FastCCD
This driver is supported under linux and uses the
libcin
driver developed by Stuart Wilkins at the
NSLS-II. This library acts as the interface between
the UDP controlled Camera Interface Node and the areaDetector driver. Please
see the libcin
readme for
information on the required network setup.
Additional information:


DEFEND. EXPAND. INVADE!

Experience an unique gameplay in every mission. Build your base and prepare it to survive waves of enemies attacks or prepare your strategy to expand your base to take down the enemy. Manage your resources wisely to upgrade your weapons structures during the game.
- 15 missions
- Survival mode
- 9 achievements
- Structures upgrades
- 6 different enemies
- Unique gameplay
- Survival mode
- 9 achievements
- Structures upgrades
- 6 different enemies
- Unique gameplay


UX/UI Design
Design Thinking
Contextual Design
HCI Research
Front-end development
Machine Learning
Data Mining
Cyber Security
Problem solving mindset
Marketing
Entrepreneurship
Innovation strategy
Project management
Firstly hired to design and implement the interface of their ML based marketing planning tool, I now work as a UX designer, front end developer and mentor at Flygresor, part of the eTraveli group. I help optimize internal operations as well as enhance UX experience of websites.
I worked on how to design Machine Learning based decisions suport systems in collaboration with Pond - PWC Experience Center Data Analysts team.
I taught Mathematics to two high school students, helped them develop their potential and earn confidence in the scientific fields.
I helped establishing and implementing communication processes and online channels between the start up Minute Papillote and its customers and end users.
I contributed to the deployment of the software Diane improving the quality and conformity of pre surgery check-ups, their transmissions and follow ups, including the training of doctors and medical staff on how to use the tool efficiently on a daily basis.
I tutored three bachelor students through the year and coached them in Math, Physics and Chemistry, 2 hours per week, until the final national entry exams to Engineering Schools.
Master of Science in ICT Innovation
with honours
Master of Science in ICT Innovation
Diplôme d'ingénieur de Grandes Ecoles Master of Science in Computer Science
I also received the EIT Digital Master School certificate along with the Eurecom certificate. In addition, I was awarded a project management certificate in 2016.


{% extends "base_forms.html" %} {% load crispy_forms_tags %} {% block logo %} {% include "includes/logo.html" %} {% endblock %} {% block content %}
Please fill out this form to request information about hosting a workshop at your institution. We’ll get back to you shortly to provide information and answer any questions you might have.
If you already know you would like a workshop at your institution, please use our request a workshop form to get started with scheduling. Thank you!
{% crispy form %} {% endblock %}


If you have been doing code changes and committing as you go and then look back at the changes you may see something you don’t like the look of. Assuming no-one has a copy of your code changes you can go back and modify the files at a certain point in time within your commit history.
I use Git Bash by default but the editor sucks compared to Sublime Text so first things first lets setup the Git editor.

Run this:
git rebase --interactive 1185cb0de5d5e5b4c79f83a0c51ed06a5d22d7c4^
This will open Sublime Text and you’ll see lines similar to:
pick d3adb33 My Commit message
pick d5bdb67 Other Commit message
Change “pick” to “edit” on the commit you want to modify, save and exit
You can then make the changes to your files and when ready run:
git commit --all --amend
Sublime Text will open again so you can edit the commit message, just save, exit and run:
git rebase --continue
We’re done!
Your previous commit has been amended and you’re back to where you were with the latest commits ready to be pushed.


Event Location:
Catholic University of Central Africa
16326 Coron Yaounde
Yaounde, , Cameroon
Abstract:
As a DBA in the modern era, you may be required from time to time to do something outside of your comfort zone. One of these things may be to become quickly acquainted with SSRS. Even better is that you may be required to do things you have not considered in a standard report. In this session, you will learn how to implement a framework to help provide a common ground for your reports. This session will delve into fun topics such as dynamic grouping and dynamic sorting. We are not talking about the interactive sorting that your accountant may use. Attendees will also be introduced to a few quick methods of exporting Reports from the report server - this is from a DBA perspective after-all!
Speaker(s): Jason Brimhall,
Abstract:
This presentation is meant to introduce the power of SQL Server to the "total novice". Often folks arrive at SQLSaturdays hoping to attend a session aimed at the novice. Well this is your chance!!. This hands on presentation assumes that you know NOTHING about SQL Server and that you must come up to speed in a minimal amount of time. We shall learn about the varied components of the product and end up creating a few simple queries, giving you enough knowledge to go back to your workplace and to perform like a star.
Speaker(s): Steve Simon,
Abstract:
SQL Server 2012: Over the past 18 months many financial and portfolio management firms have been severely ‘hit’ by the depressed markets and poor economic conditions.This lead to risk exposure and considerable client liability.We like many firms have gone through the 'teething process'with regards to data mining model predictions and have now taken our systems from the prototype stage to our “shop floor” and are getting the 'good word' out to management via SQL Server Reporting Services.
Speaker(s): Steve Simon,
Abstract:
We will be looking at the HA and DR considerations and the difference between the two. We will focus on the built in HA functionality of SQL server.
Speaker(s): Jody Roberts,
Abstract:
Microsoft SQL Server is a cloud-ready information platform that will help IT and Database Professionals unlock breakthrough insights across their organizations and quickly build solutions to extend data across on-premises and public cloud. Cloud on Your Terms enables organizations to create and scale business solutions fast, on their terms from server to private or public cloud. This content module is designed for the 2012 release of SQL Server 2012. To learn more about the latest SQL Server 2012 features and services,
Speaker(s): ACHILLE NGUELA NGUELA,
Abstract:
In this session we will discover the benefits of using SQL 2012 extended events. How to work smart and NOT hard
Speaker(s): Jody Roberts,
This is a list of speakers from the XML Guidebook records. The details and URLs were valid at the time of the event.
LinkedIn: http://za.linkedin.com/pub/jody-roberts/7/b29/193/Edit
Contact: http://JodyWP.wordpress.com
Jody Roberts is a Microsoft Data Platform MVP based in Cape Town, South Africa. He specializes in SQL Server architecture, disaster recovery (DR), and server optimization. Jody serves as a PASS Regional Mentor responsible for the Middle East amp; Africa, Chapter Lead of the SQLCape user group, and Co-Lead of the PASS Cloud Virtual Chapter. Jody is a Principal Consultant at Northern Data.
LinkedIn: http://www.linkedin.com/in/stephenrsimon/
Contact: http://www.sqlservercentral.com/blogs/simon_says/
Steve Simon is a Database Solutions Architect with Business Knowledge Services Inc. He has been involved with database design and analysis for over 35 years. Steve has presented papers at numerous PASS Summits and PASS SQL Rallies. He is also regular presenter on the SQLSaturday circuit and he is a contributor on SQLShack.com
LinkedIn: https://www.linkedin.com/in/dbajbrimhall/
Contact: http://jasonbrimhall.info
Jason Brimhall has more than 20 years of experience and has worked with SQL Server 6.5 through SQL Server 2019. He has experience in performance tuning, high transaction environments, and large environments. He is currently a consultant specializing in performance tuning, server analysis, and problem resolution. Jason is a Microsoft Certified Master (MCM) and a Data Platform MVP.
LinkedIn: http://za.linkedin.com/pub/jody-roberts/7/b29/193/Edit
Contact: http://JodyWP.wordpress.com
Jody Roberts is a Microsoft Data Platform MVP based in Cape Town, South Africa. He specializes in SQL Server architecture, disaster recovery (DR), and server optimization. Jody serves as a PASS Regional Mentor responsible for the Middle East amp; Africa, Chapter Lead of the SQLCape user group, and Co-Lead of the PASS Cloud Virtual Chapter. Jody is a Principal Consultant at Northern Data.
LinkedIn: http://www.linkedin.com/in/stephenrsimon/
Contact: http://www.sqlservercentral.com/blogs/simon_says/
Steve Simon is a Database Solutions Architect with Business Knowledge Services Inc. He has been involved with database design and analysis for over 35 years. Steve has presented papers at numerous PASS Summits and PASS SQL Rallies. He is also regular presenter on the SQLSaturday circuit and he is a contributor on SQLShack.com
LinkedIn: http://www.linkedin.com/in/achil/
11 Years Informations technology Pro. MCITP Entreprise Admin MCITP Entreprise Desktop Admin MCITP Sharepoint Admin MCSA Windows Server
The following is a list of sponsors that helped fund the event.


JBehave is designed to be embedded in different development environments. The JBehave Core module contains support for running stories as JUnit tests - which can be run either in your favourite IDE or in your command-line build that supports JUnit tests. Other unit testing frameworks, e.g. TestNG, can also be used very easily, c.f. FAQ.
You can also run stories using the JBehave Ant or Maven extensions. Both support two way to lookup stories, by list of story classes or by Java path includes/excludes pattern. Below are examples on how to configure both extensions - using the trader example.
JBehave provides a StoryEmbedder as an entry point to running stories. The embedder allows the specification of the configuration and the candidate steps. Then one needs only to specify the paths of the stories to run.
The StoryEmbedder can also be used to run the stories in any IDE environment, e.g. via JUnit, without the need to extend any base class.
where the Classpath/URLTraderStoryEmbedder define the configuration using the loading from the classpath and URL resources, respectively. E.g.:
Remember to include jbehave-ant to your runtime classpath.
Note: we are using as default scope compile, which means that the stories will be looked up in the source directory (which can be optionally specified and defaults to src/main/java). If the scope is set to test the stories will be looked up in the test source directory (which can be optionally specified and defaults to src/test/java).
Note: we are using as default scope compile, which means that the stories will be looked up in the POM source directory. If the scope is set to test the stories will be looked up in the POM test source directory.
 To allow the generation of complete reports view, the runners need to be enabled to execute story in batch and ignoreFailure modes (i.e. setting these flags to true). In this way all stories will run and the build will be nominally successful but a full report can ben generated, including the failed and pending steps. Note that the batch mode is strictly speaking not essential but makes it easier to get a summary of the failed stories.


Box iOS SDK
Getting Started Docs: https://developer.box.com/guides/mobile/ios/quick-start/
NOTE:
The Box iOS SDK in Objective-C (prior to v3.0.0) has been moved from the main branch to the objective-c-maintenance branch. Going forward, the main branch will contain the iOS SDK in Swift, starting with v3.0.0.
Box iOS SDK
Requirements
- iOS 11.0+ / Mac OS X 10.13+ / tvOS 11.0+ / watchOS 4.0+
- Xcode 10.0+
Installing the SDK
Carthage
Step 1: Add to your Cartfile
git "https://github.com/box/box-ios-sdk.git" ~> 5.0
Step 2: Update dependencies
$ carthage update --use-xcframeworks --platform iOS
Step 3: Drag the built xcframework from Carthage/Build into your project.
For more detailed instructions, please see the official documentation for Carthage.
CocoaPods
Step 1: Add to your Podfile
pod 'BoxSDK', '~> 5.0'
Step 2: Install pod by running the following command in the directory with the Podfile
$ pod install
For more detailed instructions, please see the official documentation for Cocoapods.
Swift Package Manager
Importing BoxSDK into Project
Step 1: Click on Xcode project file
Step 2: Click on Swift Packages and click on the plus to add a package
Step 3: Enter the following repository url https://github.com/box/box-ios-sdk.git
and click next
Step 4: Leave the default settings to get the most recent release and click next to finish importing
The process should look like below:
Adding BoxSDK as a Dependency
For detailed instructions, please see the official documentation for SPM.
Getting Started
To get started with the SDK, get a Developer Token from the Configuration page of your app in the Box Developer Console. You can use this token to make test calls for your own Box account.
import BoxSDK
let client = BoxSDK.getClient(token: "YOUR_DEVELOPER_TOKEN")
client.users.getCurrentUser() { result in
switch result {
case let .error(error):
print("Error: \(error)")
case let .success(user):
print("\(user.name) (\(user.login)) is logged in")
}
}
The usage docs that show how to make calls to the Box API with the SDK can be found here.
The Jazzy docs that show class, method, variable, etc definitions can be found here.
Sample Apps
OAuth2 Sample App
A sample app using OAuth2 Authentication can be found in the repository here. This app demonstrates how to use the SDK to make calls, and can be run directly by entering your own credentials to log in.
To execute the sample app:
Step 1: Run carthage
$ cd SampleApps/OAuth2SampleApp
$ carthage update --use-xcframeworks --platform iOS
Step 2: Open Xcode Project File
$ open OAuth2SampleApp.xcodeproj
Step 3: Insert your client ID and client secret
First, find your OAuth2 app’s client ID and secret from the Box Developer Console. Then, add these
values to the sample app in the Constants.swift
file in the sample app:
static let clientId = "YOUR CLIENT ID GOES HERE"
static let clientSecret = "YOUR CLIENT SECRET GOES HERE"
Step 4: Set redirect URL
Using the same client ID from the previous step, set the redirect URL for your application in the
Box Developer Console to boxsdk-<<YOUR CLIENT ID>>://boxsdkoauth2redirect
, where <<YOUR CLIENT ID>>
is replaced with your client ID. For example, if your client ID were vvxff7v61xi7gqveejo8jh9d2z9xhox5
the redirect
URL should be boxsdk-vvxff7v61xi7gqveejo8jh9d2z9xhox5://boxsdkoauth2redirect
Step 5: Run the sample app
JWT Auth Sample App
A sample app using JWT Authentication can be found in the repository here. This app demonstrates how to set up JWT authentication with a remote authorization service, and will not run until you provide the code to retrieve tokens.
To execute the sample app:
Step 1: Run carthage
$ cd SampleApps/JWTSampleApp
$ carthage update --use-xcframeworks --platform iOS
Step 2: Open Xcode Project File
$ open JWTSampleApp.xcodeproj
Step 3: Insert your client ID and client secret
First, find your OAuth2 app’s client ID and secret from the Box Developer Console. Then, add these
values to the sample app in the Constants.swift
file in the sample app:
static let clientId = "YOUR CLIENT ID GOES HERE"
static let clientSecret = "YOUR CLIENT SECRET GOES HERE"
Step 4: Add code for retrieving access tokens
In the ViewController.swift
file in the sample app, edit the
obtainJWTTokenFromExternalSources()
method:
func obtainJWTTokenFromExternalSources() -> DelegatedAuthClosure {
return { uniqueID, completion in
#error("Obtain a JWT Token from your own service or a Developer Token for your app in the Box Developer Console at https://app.box.com/developers/console and return it in the completion.")
// The code below is an example implementation of the delegate function
// Please provide your own implementation
// ...
}
}
Step 5: Run the sample app
FIPS 140-2 Compliance
The Box iOS SDK uses the CommonCrypto library, which relies on Apple’s corecrypto cryptographic module. This module has undergone multiple validations by the Cryptographic Module Validation Program (CMVP) and is confirmed to be compliant with FIPS 140-2 standards. For further information, please refer to Apple’s security certification and iOS security certifications.
Versions
We use a modified version of Semantic Versioning for all changes. See version strategy for details which is effective from 30 July 2022.
Supported Version
Only the current MAJOR version of SDK is supported. New features, functionality, bug fixes, and security updates will only be added to the current MAJOR version.
A current release is on the leading edge of our SDK development, and is intended for customers who are in active development and want the latest and greatest features. Instead of stating a release date for a new feature, we set a fixed minor or patch release cadence of maximum 2-3 months (while we may release more often). At the same time, there is no schedule for major or breaking release. Instead, we will communicate one quarter in advance the upcoming breaking change to allow customers to plan for the upgrade. We always recommend that all users run the latest available minor release for whatever major version is in use. We highly recommend upgrading to the latest SDK major release at the earliest convenient time and before the EOL date.
Version schedule
| Version | Supported Environments | State | First Release | EOL/Terminated |
|---|---|---|---|---|
| 5 | iOS 11.0+ / Mac OS X 10.13+ / tvOS 11.0+ / watchOS 4.0+ | Supported | 28 Oct 2021 | TBD |
| 4 | EOL | 13 Feb 2020 | 28 Oct 2021 | |
| 3 | EOL | 20 Nov 2019 | 13 Feb 2020 |
Copyright and License
Copyright 2019 Box, Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.