Use MusicBrainz in iOS(一)初步使用
2014-04-10 02:20
330 查看
最近比较忙,一些文章写到了印象笔记中去了,也确实没有什么拿得出手写上博客的,所以最近都没怎么写博客。
今天接到了一个任务,就是使用MusicBrainz获取音乐的完整信息。今天下来,简单搭建好了工程的环境,写了个最简单的Demo,其中遇到了不少的坑,现在总结下,让朋友们少走点弯路。
首先介绍下MusicBrainz,简单来说它就是一个数据库(或者说是音乐世界的百科全书),通过它可以根据音乐文件的一小段信息,如歌曲名,歌手和创作时间等零碎信息,从数据库中获取该歌曲的完整信息。
对于那些热爱音乐而又有点强迫症的用户是最适合不过的了。
由于任务只是在iOS上发起网络请求从MusicBrainz中获取数据,所以我直奔主题了。
ZIP:
也可以直接用命令git clone,只要不是简单的Download ZIP就行了。
如果该文件来自于Download ZIP,由于没有git文件,所以运行shell script时会报错,也无法加载submodules。
如果之前已经运行过了,建议通过Command + Shift + K,Clean一下已经生成的文件。
在Products下通过Show in Finder打开生成的文件路径:
注意一定要将Headers和.a文件放进MusicBrainzDemo / MusicBrainzDemo目录中,否则要在Build Settings下另外设置类库的查找路径。
接着添加以上文件到工程中。
如下图:
由于MusicBrainz类库还用到了自行创建的Category,所以还要在Other Linker Flags中添加-all_load选项。否则会报错。
经过以上步骤,类库在工程中就配置好了,有点麻烦,CocoaPods也不支持该类库(该项目最近一次更新在两年前,现在都来到了iOS 7的年代,原来的工程还停留在iOS 5,如果按MusicBrainz在GitHub上的指导还需要iphone simulator 5.1,实在太麻烦。挺大的一个坑,所以这里我直接按照自己的思路配置项目)。
代码如下:
运行后控制台输出如下:
这段代码的功能是通过一个MBID从MusicBrainz数据库中获取艺术家信息,也就是陈奕迅(歌神啊)。
初步的配置和简单的测试Demo到此为止,接下来会做稍微深层次的探索。博客会继续更新。
今天接到了一个任务,就是使用MusicBrainz获取音乐的完整信息。今天下来,简单搭建好了工程的环境,写了个最简单的Demo,其中遇到了不少的坑,现在总结下,让朋友们少走点弯路。
首先介绍下MusicBrainz,简单来说它就是一个数据库(或者说是音乐世界的百科全书),通过它可以根据音乐文件的一小段信息,如歌曲名,歌手和创作时间等零碎信息,从数据库中获取该歌曲的完整信息。
对于那些热爱音乐而又有点强迫症的用户是最适合不过的了。
由于任务只是在iOS上发起网络请求从MusicBrainz中获取数据,所以我直奔主题了。
1.Clone MusicBrainz-objc from GitHub
从GitHub上下载MusicBrainz-objc的第三方类库,注意一定要Clone(原因下面说明),不能简单地DownloadZIP:
也可以直接用命令git clone,只要不是简单的Download ZIP就行了。
2.Create static library and headers
打开工程,选择libmusicbrainz-iphoneos的scheme,Build工程。如果该文件来自于Download ZIP,由于没有git文件,所以运行shell script时会报错,也无法加载submodules。
如果之前已经运行过了,建议通过Command + Shift + K,Clean一下已经生成的文件。
在Products下通过Show in Finder打开生成的文件路径:
3.Add library to project
新建一个工程MusicBrainzDemo,将Debug-iphoneos或Debug-iphonesimulator中生成的静态库文件和头文件复制到该工程的MusicBrainzDemo文件夹中。注意一定要将Headers和.a文件放进MusicBrainzDemo / MusicBrainzDemo目录中,否则要在Build Settings下另外设置类库的查找路径。
接着添加以上文件到工程中。
4.Build Settings
打开MusicBrainzDemo工程,打开Build Settings选项,搜索Header Search Paths,添加一项:$(SDKROOT)/usr/include/libxml2,目的是给出libxml2这个动态库的头文件搜索路径。如下图:
由于MusicBrainz类库还用到了自行创建的Category,所以还要在Other Linker Flags中添加-all_load选项。否则会报错。
5.Build Phases
打开Build Phases选项,添加以下类库:经过以上步骤,类库在工程中就配置好了,有点麻烦,CocoaPods也不支持该类库(该项目最近一次更新在两年前,现在都来到了iOS 7的年代,原来的工程还停留在iOS 5,如果按MusicBrainz在GitHub上的指导还需要iphone simulator 5.1,实在太麻烦。挺大的一个坑,所以这里我直接按照自己的思路配置项目)。
6.Code and Test
添加代码,测试一下。关于MusicBrainz-iOS类库中的API详见其文档。代码如下:
#import "ViewController.h" #import "MB.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; MBConnection *conn = [MBConnection connection]; MBRequest *req = [MBRequest lookupWithEntity:MBEntityArtist mbid:@"86119d30-d930-4e65-a97a-e31e22388166" incParameters:(MBIncParameterArtistRels | MBIncParameterReleaseGroups)]; void (^successBlock)(MBRequest *, MBMetadata *) = ^(MBRequest *request, MBMetadata *metadata) { NSLog(@"%@", metadata.Artist.Name); NSLog(@"success"); }; void (^failureBlock)(MBRequest *, NSError *, NSData *) = ^(MBRequest *request, NSError *error, NSData *data) { NSLog(@"Error for %@", error); }; [conn enqueueRequest:req onSuccess:successBlock onFailure:failureBlock]; } @end
运行后控制台输出如下:
2014-04-10 02:00:46.632 MusicBrainzDemo[16273:60b] -[MBConnection enqueueRequest:onSuccess:onFailure:] [Line 120] method => Thursday, April 10, 2014 at 2:00:46 AM China Standard Time Request ------- curl -X GET -H "Accept-Language: en, fr, de, zh-Hans, zh-Hant, ja, nl, it, es, es-MX, ko, pt, pt-PT, da, fi, nb, sv, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, en-GB, en-AU, ca, hu, vi, en-us" -H "User-Agent: libmusicbrainz-objc-faf64ac" "http://musicbrainz.org:80/ws/2/artist/86119d30-d930-4e65-a97a-e31e22388166/?client=libmusicbrainz-objc-test&inc=release-groups%2Bartist-rels&limit=25&offset=0" 2014-04-10 02:00:46.637 MusicBrainzDemo[16273:60b] -[MKNetworkEngine reachabilityChanged:] [Line 194] Server [musicbrainz.org] is reachable via Wifi 2014-04-10 02:00:49.781 MusicBrainzDemo[16273:60b] 陳奕迅 2014-04-10 02:00:49.781 MusicBrainzDemo[16273:60b] success
这段代码的功能是通过一个MBID从MusicBrainz数据库中获取艺术家信息,也就是陈奕迅(歌神啊)。
初步的配置和简单的测试Demo到此为止,接下来会做稍微深层次的探索。博客会继续更新。
相关文章推荐
- Use MusicBrainz in iOS(三)查询专辑的完整信息
- Use MusicBrainz in iOS(二)通过歌曲名查询信息
- Use MusicBrainz in iOS(三)查询专辑的完整信息
- 如何在Vista中使用MMC方式的Remote Desktops(How to use Remote Desktops through mmc console in Vista)
- TDD的iOS开发初步以及Kiwi使用入门
- 【转载】PHP使用empty检查函数返回结果时报Fatal error: Can't use function return value in write context的问题
- How To Use Git Source Control with Xcode in iOS 7
- How to use toolbar control on dialog using CToolBar class in VC++ - VC++ 中用CToolBar 类如何使用ToolBar控件
- Tomcat v7.0 Server at localhost are already in use,tomcat提示端口被占用,tomcat端口已经被使用,tomcat端口占用
- 不要在init和dealloc函数中使用Accessor 方法[Don’t Use Accessor Methods in Initializer Methods and dealloc]
- Guideline 3.1.1 - In-App Purchase 被拒绝!IOS App上传App Store 由于使用第三方支付而被拒绝的解决方案
- Use the parse push messages In xamarin iOS
- iOS---stringByAddingPercentEscapesUsingEncoding:' is deprecated: first deprecated in iOS 9.0 - Use -stringByAddingPercentEncodingWithAllowedCharacters: instead,
- XCode 6 , IOS 8 中使用 use size classes 的时候 自动调整 自定义table cell的宽度
- TDD的iOS开发初步以及Kiwi使用入门
- TDD的iOS开发初步以及Kiwi使用入门
- 使用cocapods报错 [!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes
- socket编程小问题:地址已经被使用——Address already in use
- 使用eclipse编程出现Use View.isInEditMode() in your custom views to skip code when shown in Eclipse解决方法
- How To Use Git Source Control with Xcode in iOS 6