diff --git a/src/calibre/devices/mtp/unix/driver.py b/src/calibre/devices/mtp/unix/driver.py
index c763da3a45..71914cddc0 100644
--- a/src/calibre/devices/mtp/unix/driver.py
+++ b/src/calibre/devices/mtp/unix/driver.py
@@ -25,6 +25,8 @@ def fingerprint(d):
return MTPDevice(d.busnum, d.devnum, d.vendor_id, d.product_id, d.bcd,
d.serial, d.manufacturer, d.product)
+APPLE = 0x05ac
+
class MTP_DEVICE(MTPDeviceBase):
# libusb(x) does not work on OS X. So no MTP support for OS X
@@ -53,7 +55,8 @@ class MTP_DEVICE(MTPDeviceBase):
devs = set()
for d in devices_on_system:
fp = fingerprint(d)
- if fp not in self.blacklisted_devices:
+ if fp not in self.blacklisted_devices and fp.vendor_id != APPLE:
+ # Do not try to open Apple devices
devs.add(fp)
# Clean up ejected devices
@@ -93,7 +96,7 @@ class MTP_DEVICE(MTPDeviceBase):
p(err)
return False
devs = [d for d in devices_on_system if (d.vendor_id, d.product_id)
- in self.known_devices]
+ in self.known_devices and d.vendor_id != APPLE]
if not devs:
p('No known MTP devices connected to system')
return False
diff --git a/src/calibre/ebooks/mobi/reader/markup.py b/src/calibre/ebooks/mobi/reader/markup.py
index 161a76f284..73ba09a189 100644
--- a/src/calibre/ebooks/mobi/reader/markup.py
+++ b/src/calibre/ebooks/mobi/reader/markup.py
@@ -42,8 +42,8 @@ def update_internal_links(mobi8_reader):
mr.header.codec) + suffix
tag = posfid_index_pattern.sub(replacement, tag, 1)
srcpieces[j] = tag
- part = ''.join([x.decode(mr.header.codec) for x in srcpieces])
- parts.append(part)
+ raw = b''.join(srcpieces)
+ parts.append(raw.decode(mr.header.codec))
# All parts are now unicode and have no internal links
return parts
diff --git a/src/calibre/ebooks/mobi/writer8/skeleton.py b/src/calibre/ebooks/mobi/writer8/skeleton.py
index 2c3562e87b..c22d8342a6 100644
--- a/src/calibre/ebooks/mobi/writer8/skeleton.py
+++ b/src/calibre/ebooks/mobi/writer8/skeleton.py
@@ -305,7 +305,7 @@ class Chunker(object):
ans.append(start)
while rest:
start, rest = split_multibyte_text(rest)
- ans.append(b'' + start + '')
+ ans.append(b'' + start + b'')
return [Chunk(x, self.chunk_selector) for x in ans]
def merge_small_chunks(self, chunks):