Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into mono-2018-02
Browse files Browse the repository at this point in the history
  • Loading branch information
lewurm committed Feb 27, 2018
2 parents ecc9293 + afb6c6c commit 129a4cb
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 128 deletions.
140 changes: 21 additions & 119 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,136 +9,38 @@
[1]: https://jenkins.mono-project.com/view/Xamarin.MaciOS/job/xamarin-macios-builds-master/badge/icon
[2]: https://jenkins.mono-project.com/view/Xamarin.MaciOS/job/xamarin-macios-builds-master

**Welcome!**
## Welcome!

This module is the main repository for both **Xamarin.iOS** and **Xamarin.Mac**.

These frameworks allow us to create native iOS, tvOS, watchOS and Mac applications using the same UI controls we would in Objective-C and Xcode, except with the flexibility and elegance of a modern language (C#), the power of the .NET Base Class Library (BCL), and two first-class IDEs—Xamarin Studio and Visual Studio—at our fingertips.
These SDKs allow us to create native iOS, tvOS, watchOS and macOS applications using the same UI controls we would in Objective-C and Xcode, except with the flexibility and elegance of a modern language (C#), the power of the .NET Base Class Library (BCL), and two first-class IDEs—Visual Studio for Mac and Visual Studio—at our fingertips.

### Continuous Builds ###
This repository is where we do development for the Xamarin.iOS and Xamarin.Mac SDKs. There are a few ways that you can contribute, for example:

You can download continuous builds of our main development branches from [our wiki page](https://github.com/xamarin/xamarin-macios/wiki#continuous-builds).
- [Submit bugs and feature requests](https://github.com/xamarin/xamarin-macios/wiki/Submitting-Bugs-&-Suggestions)
- [Review source code changes](https://github.com/xamarin/xamarin-macios/pulls)
- [Submit pull requests](https://github.com/xamarin/xamarin-macios/wiki/How-to-Contribute#pull-requests) to resolve issues and fix bugs

## Build requirements ##
## Contributing

* Autoconf, automake and libtool.
If you are interested in fixing issues and contributing directly to the code base, please see the document [How to Contribute](https://github.com/xamarin/xamarin-macios/wiki/How-to-Contribute), which covers the following:

You can use brew, or [this script](https://gist.github.com/rolfbjarne/3a979187ddd0855da073) to get
it directly from gnu.org (you'll have to edit your PATH to include /opt/bin if you use the script)
To install brew and all the tool dependencies:
- How to [build and run](https://github.com/xamarin/xamarin-macios/wiki/Build-&-Run) from source
- The [development workflow](https://github.com/xamarin/xamarin-macios/wiki/How-to-Contribute#work-branches), including [debugging](https://github.com/xamarin/xamarin-macios/wiki/Build-&-Run#debugging-applications-from-source) and [running tests](https://github.com/xamarin/xamarin-macios/blob/master/tests/README.md)
- [Coding Guidelines](https://github.com/xamarin/xamarin-macios/wiki/How-to-Contribute#coding-guidelines)
- [Submitting pull requests](https://github.com/xamarin/xamarin-macios/wiki/How-to-Contribute#pull-requests)

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew update
$ brew install libtool autoconf automake bison flex
## Feedback

* CMake
- Ask a question on [Stack Overflow](https://stackoverflow.com/questions/tagged/xamarin.ios) or the [Xamarin Forums](https://forums.xamarin.com/)
- [Request a new feature](https://github.com/xamarin/xamarin-macios/wiki/Submitting-Bugs-&-Suggestions#writing-good-bug-reports-and-feature-requests) on GitHub
- [Vote on existing feature requests](https://github.com/xamarin/xamarin-macios/wiki/Submitting-Bugs-&-Suggestions#before-submitting-an-issue)
- [Submit bugs to GitHub Issues](https://github.com/xamarin/xamarin-macios/wiki/Submitting-Bugs-&-Suggestions)
- Discuss development and design on [Gitter](https://gitter.im/xamarin/xamarin-macios) or email [macios-devel@lists.xamarin.com](http://lists.xamarin.com/mailman/listinfo/macios-devel)

You can use brew, or download manually from [cmake.org](https://cmake.org/download/).

CMake must be in PATH, so if you install it somewhere else, you'll have to
fix up your PATH accordingly (not necessary if installed using brew).

To install using brew:

$ brew install cmake

* Xcode

To build the Xamarin.iOS and Xamarin.Mac SDKs you need a certain version of Xcode.
The build will tell you exactly which version you need.

You can download the Xcode version you need from [Apple's Developer Center](https://developer.apple.com/downloads/index.action?name=Xcode)
(requires an Apple Developer account).

To ease development with different versions of the SDK that require different versions
of Xcode, we require Xcode to be in a non-standard location (based on the Xcode version).

For example Xcode 7.0 must be installed in /Applications/Xcode7.app.

The recommended procedure is to download the corresponding Xcode dmg from Apple's
Developer Center, extract Xcode.app to your system, _and rename it before
launching it the first time_. Renaming Xcode.app after having launched it
once may confuse Xcode, and strange errors start occuring.

* Mono MDK.

The build will tell you if you need to update, and where to get it.

* Xamarin Studio.

The build will tell you if you need to update, and where to get it.

* You can also provision some of the dependencies with an included script:

$ ./system-dependencies.sh --provision-[xcode|xamarin-studio|mono|all]

## Quick build & install ##

Follow the following steps to build and install Xamarin.iOS and Xamarin.Mac:

1. Clone this repository and its submodules

$ git clone --recursive git@github.com:xamarin/xamarin-macios.git
$ cd xamarin-macios

2. Fetch dependencies and build everything

$ make world

3. Make sure permissions are OK to install into system directories (this will ask for your password)

$ make fix-install-permissions

4. Install into the system

$ make install-system

5. Build again after any local changes

Don't use `make world` again to rebuild, because it resets dependencies
and causes unnecessary rebuilds. Instead use the standard `make all install`
(our Makefiles are parallel safe, which greatly speeds up the build):

$ make all -j8 && make install -j8

## Configure ##

There is a configure script that can optionally be used to configure the build.
By default, everything required for both Xamarin.iOS and Xamarin.Mac will be built.

* --disable-mac: Disable Mac-related parts.
* --disable-ios: Disable iOS-related parts.

In both cases the resulting build will contain both iOS and Mac bits because:

* Parts of the iOS build depends on Mac parts (in particular mtouch uses
Xamarin.Mac).

* The class libraries builds can not be disabled because a very common error
is to end up with code that only works/builds in either iOS or Mac.

* --enable-ccache: Enables cached builds with `ccache` (default if `ccache` is found in the path).
* --disable-ccache: Disables cached builds with `ccache`, even if it is present.
* --disable-strip: If executables should be stripped or not. This makes it easier
to debug native executables using lldb.
* --help: Show the help.

## Contributing ##

### Mailing Lists

To discuss this project, and participate in the design, we use the [macios-devel@lists.xamarin.com](http://lists.xamarin.com/mailman/listinfo/macios-devel) mailing list.

### Chat

There is also a gitter chat room that can be used to discuss this project, and participate in the design:
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/xamarin/xamarin-macios?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

### Coding Guidelines

We use [Mono's Coding Guidelines](http://www.mono-project.com/community/contributing/coding-guidelines/).

### Reporting Bugs
## License

We use [Bugzilla](https://bugzilla.xamarin.com/newbug) to track issues.
Copyright (c) .NET Foundation Contributors. All rights reserved.
Licensed under the [MIT](https://github.com/xamarin/xamarin-macios/blob/master/LICENSE) License.
2 changes: 2 additions & 0 deletions src/AudioUnit/AudioUnit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,9 @@ public struct ImmediateStruct

public class AudioUnit : IDisposable, ObjCRuntime.INativeObject
{
#pragma warning disable 649 // Field 'AudioUnit.handle' is never assigned to, and will always have its default value
internal IntPtr handle;
#pragma warning restore 649
public IntPtr Handle {
get {
return handle;
Expand Down
2 changes: 2 additions & 0 deletions src/ObjCRuntime/Blocks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@

namespace ObjCRuntime {

#pragma warning disable 649 // Field 'XamarinBlockDescriptor.ref_count' is never assigned to, and will always have its default value 0
[StructLayout (LayoutKind.Sequential)]
#if !XAMCORE_2_0
public
Expand All @@ -49,6 +50,7 @@ struct BlockDescriptor {
public IntPtr dispose;
public IntPtr signature;
}
#pragma warning restore 649

struct XamarinBlockDescriptor {
public BlockDescriptor descriptor;
Expand Down
12 changes: 6 additions & 6 deletions system-dependencies.sh
Original file line number Diff line number Diff line change
Expand Up @@ -399,31 +399,31 @@ function check_xcode () {
function check_mono () {
if ! test -z $IGNORE_MONO; then return; fi

PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/Versions/Current/bin/pkg-config
MONO_VERSION_FILE=/Library/Frameworks/Mono.framework/Versions/Current/VERSION
if ! /Library/Frameworks/Mono.framework/Commands/mono --version 2>/dev/null >/dev/null; then
if ! test -z $PROVISION_MONO; then
install_mono
else
fail "You must install the Mono MDK (http://www.mono-project.com/download/)"
return
fi
elif ! test -e $PKG_CONFIG_PATH; then
elif ! test -e $MONO_VERSION_FILE; then
if ! test -z $PROVISION_MONO; then
install_mono
else
fail "Could not find pkg-config, you must install the Mono MDK (http://www.mono-project.com/download/)"
fail "Could not find VERSION file, you must install the Mono MDK (http://www.mono-project.com/download/)"
return
fi
fi

MIN_MONO_VERSION=`grep MIN_MONO_VERSION= Make.config | sed 's/.*=//'`
MAX_MONO_VERSION=`grep MAX_MONO_VERSION= Make.config | sed 's/.*=//'`

ACTUAL_MONO_VERSION=`$PKG_CONFIG_PATH --modversion mono`.`cat /Library/Frameworks/Mono.framework/Home/updateinfo | cut -d' ' -f2 | cut -c6- | awk '{print(int($0))}'`
ACTUAL_MONO_VERSION=`cat $MONO_VERSION_FILE`
if ! is_at_least_version $ACTUAL_MONO_VERSION $MIN_MONO_VERSION; then
if ! test -z $PROVISION_MONO; then
install_mono
ACTUAL_MONO_VERSION=`$PKG_CONFIG_PATH --modversion mono`
ACTUAL_MONO_VERSION=`cat $MONO_VERSION_FILE`
else
fail "You must have at least Mono $MIN_MONO_VERSION, found $ACTUAL_MONO_VERSION"
return
Expand All @@ -433,7 +433,7 @@ function check_mono () {
elif is_at_least_version $ACTUAL_MONO_VERSION $MAX_MONO_VERSION; then
if ! test -z $PROVISION_MONO; then
install_mono
ACTUAL_MONO_VERSION=`$PKG_CONFIG_PATH --modversion mono`.`cat /Library/Frameworks/Mono.framework/Home/updateinfo | cut -d' ' -f2 | cut -c6- | awk '{print(int($0))}'`
ACTUAL_MONO_VERSION=`cat $MONO_VERSION_FILE`
else
fail "Your mono version is too new, max version is $MAX_MONO_VERSION, found $ACTUAL_MONO_VERSION."
fail "You may edit Make.config and change MAX_MONO_VERSION to your actual version to continue the"
Expand Down
16 changes: 13 additions & 3 deletions tests/bindings-test/ProtocolTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,16 @@ namespace Xamarin.BindingTests
[Preserve (AllMembers = true)]
public class ProtocolTest
{
bool HasProtocolAttributes {
get {
#if LINKALL
if (!Runtime.DynamicRegistrationSupported)
return false;
#endif
return true;
}
}

[Test]
public void OnlyProtocol ()
{
Expand All @@ -30,7 +40,7 @@ public void OnlyProtocol ()
Assert.IsNotNull (IP1, "IP1");
// with a [Protocol] attribute
var IP1Attributes = IP1.GetCustomAttributes (typeof (ProtocolAttribute), false);
if (Runtime.DynamicRegistrationSupported) {
if (HasProtocolAttributes) {
Assert.AreEqual (1, IP1Attributes.Length, "[Protocol] IP1");
var IP1Protocol = (ProtocolAttribute)IP1Attributes [0];
Assert.AreEqual ("P1", IP1Protocol.Name, "Name");
Expand Down Expand Up @@ -62,7 +72,7 @@ public void ProtocolWithBaseType ()

// with a [Protocol] attribute
var IP2Attributes = IP2.GetCustomAttributes (typeof (ProtocolAttribute), false);
if (Runtime.DynamicRegistrationSupported) {
if (HasProtocolAttributes) {
Assert.AreEqual (1, IP2Attributes.Length, "[Protocol] IP2");
var IP2Protocol = (ProtocolAttribute)IP2Attributes [0];
Assert.AreEqual ("P2", IP2Protocol.Name, "Name");
Expand Down Expand Up @@ -98,7 +108,7 @@ public void ProtocolWithBaseTypeAndModel ()

// with a [Protocol] attribute
var IP3Attributes = IP3.GetCustomAttributes (typeof (ProtocolAttribute), false);
if (Runtime.DynamicRegistrationSupported) {
if (HasProtocolAttributes) {
Assert.AreEqual (1, IP3Attributes.Length, "[Protocol] IP3");
var IP3Protocol = (ProtocolAttribute)IP3Attributes [0];
Assert.AreEqual ("P3", IP3Protocol.Name, "Name");
Expand Down
5 changes: 5 additions & 0 deletions tests/introspection/Mac/MacApiCtorInitTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,11 @@ protected override bool Skip (Type type)
if (!Mac.CheckSystemVersion (10, 12) || IntPtr.Size != 8)
return true;
break;
case "MonoMac.ImageKit.IKPictureTaker":
case "ImageKit.IKPictureTaker":
// https://bugzilla.xamarin.com/show_bug.cgi?id=46624
// https://trello.com/c/T6vkA2QF/62-29311598-ikpicturetaker-crashes-randomly-upon-deallocation?menu=filter&filter=corenfc
return true;
}

return base.Skip (type);
Expand Down
11 changes: 11 additions & 0 deletions tests/xharness/Jenkins.cs
Original file line number Diff line number Diff line change
Expand Up @@ -874,6 +874,7 @@ public int Run ()
populating = false;
}).Wait ();
GenerateReport ();
BuildTestLibraries ();
if (!IsServerMode) {
foreach (var task in Tasks)
tasks.Add (task.RunAsync ());
Expand All @@ -892,6 +893,11 @@ public bool IsServerMode {
get { return Harness.JenkinsConfiguration == "server"; }
}

void BuildTestLibraries ()
{
ProcessHelper.ExecuteCommandAsync ("make", $"all -j{Environment.ProcessorCount} -C {StringUtils.Quote (Path.Combine (Harness.RootDirectory, "test-libraries"))}", MainLog, TimeSpan.FromMinutes (1)).Wait ();
}

Task RunTestServer ()
{
var server = new HttpListener ();
Expand Down Expand Up @@ -3402,6 +3408,11 @@ public AggregatedRunSimulatorTask (IEnumerable<RunSimulatorTask> tasks)

protected override async Task ExecuteAsync ()
{
if (Tasks.All ((v) => v.Ignored)) {
ExecutionResult = TestExecutingResult.Ignored;
return;
}

// First build everything. This is required for the run simulator
// task to properly configure the simulator.
build_timer.Start ();
Expand Down

0 comments on commit 129a4cb

Please sign in to comment.